Compare commits
	
		
			29 Commits
		
	
	
		
			173ffc0044
			...
			installer
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 820bb2de5b | |||
| 7d3ad52a44 | |||
| 2cdb98e898 | |||
| b717b1ceb4 | |||
| f31ce61c2b | |||
| aec22942f7 | |||
| fc8676c3bb | |||
| 2915e42a1d | |||
| 5783d3a51e | |||
| 2fe94bba23 | |||
| 4b42960d26 | |||
| 56e9abf945 | |||
| 4e2c2f92f0 | |||
| caa208b288 | |||
| 9e6f885c17 | |||
| d8ca87bfd8 | |||
| e9467e0cc7 | |||
| 6c98ef8944 | |||
| 18981e240b | |||
| df7e5953eb | |||
| 71d1c3f9c2 | |||
| 1453a755c3 | |||
| 970af805e9 | |||
| 383e9a9b1e | |||
| 26a16d0629 | |||
| 208de7654e | |||
| f577e7d58a | |||
| 6130ee73be | |||
| 5d827aa00c | 
@@ -6,7 +6,7 @@ on:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  check:
 | 
					  check:
 | 
				
			||||||
    name: Check, build and cache Nix flake
 | 
					    name: Check, build and cache nixfiles
 | 
				
			||||||
    runs-on: ubuntu-22.04
 | 
					    runs-on: ubuntu-22.04
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
@@ -25,15 +25,23 @@ jobs:
 | 
				
			|||||||
            extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4=
 | 
					            extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Check flake
 | 
					      - name: Check flake
 | 
				
			||||||
        run: nix flake check
 | 
					        run: nix flake check --no-build
 | 
				
			||||||
      - name: Build the world
 | 
					 | 
				
			||||||
        id: build
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          path=$(nix build --no-link .#ci.x86_64-linux --json | jq -r .[0].outputs.out)
 | 
					 | 
				
			||||||
          echo "path=$path" >> "$GITHUB_OUTPUT"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Push to cache
 | 
					      - name: Build (and cache) the world
 | 
				
			||||||
 | 
					        id: build
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          HARMONIA_SSH_KEY: ${{ secrets.HARMONIA_SSH_KEY }}
 | 
					          HARMONIA_SSH_KEY: ${{ secrets.HARMONIA_SSH_KEY }}
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          ci/push-to-cache.sh "${{ steps.build.outputs.path }}"
 | 
					          nix eval --json --apply "builtins.attrNames" .#ci.x86_64-linux | jq -cr '.[]' | while read job; do
 | 
				
			||||||
 | 
					            echo "::group::Build $job"
 | 
				
			||||||
 | 
					            nix build --no-link .#ci.x86_64-linux."$job"
 | 
				
			||||||
 | 
					            echo "::endgroup::"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            echo "::group::Cache $job"
 | 
				
			||||||
 | 
					            ci/push-to-cache.sh "$(nix eval --raw .#ci.x86_64-linux."$job")"
 | 
				
			||||||
 | 
					            echo "::endgroup::"
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          echo "Building and caching CI derivation"
 | 
				
			||||||
 | 
					          nix build --no-link .#ciDrv.x86_64-linux
 | 
				
			||||||
 | 
					          UPDATE_PROFILE=1 ci/push-to-cache.sh "$(nix eval --raw .#ciDrv.x86_64-linux)"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,10 @@ path="$1"
 | 
				
			|||||||
echo "Pushing $path to cache..."
 | 
					echo "Pushing $path to cache..."
 | 
				
			||||||
nix copy --no-check-sigs --to "$STORE_URI" "$path"
 | 
					nix copy --no-check-sigs --to "$STORE_URI" "$path"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -n "$UPDATE_PROFILE" ]; then
 | 
				
			||||||
  echo "Updating profile..."
 | 
					  echo "Updating profile..."
 | 
				
			||||||
  remote_cmd nix-env -p "$REMOTE_STORE"/nix/var/nix/profiles/nixfiles --set "$path"
 | 
					  remote_cmd nix-env -p "$REMOTE_STORE"/nix/var/nix/profiles/nixfiles --set "$path"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  echo "Collecting garbage..."
 | 
					  echo "Collecting garbage..."
 | 
				
			||||||
remote_cmd nix-collect-garbage --delete-older-than 30d
 | 
					  remote_cmd nix-collect-garbage --delete-older-than 60d
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,12 @@ in
 | 
				
			|||||||
      name = "build-n-switch";
 | 
					      name = "build-n-switch";
 | 
				
			||||||
      category = "tasks";
 | 
					      category = "tasks";
 | 
				
			||||||
      help = "Shortcut to nixos-rebuild for this flake";
 | 
					      help = "Shortcut to nixos-rebuild for this flake";
 | 
				
			||||||
      command = ''doas nixos-rebuild --flake . "$@"'';
 | 
					      command = ''
 | 
				
			||||||
 | 
					        # HACK: Upstream changes in Git + Nix makes this necessary
 | 
				
			||||||
 | 
					        # https://github.com/NixOS/nix/issues/10202
 | 
				
			||||||
 | 
					        doas git config --global --add safe.directory "$PWD"
 | 
				
			||||||
 | 
					        doas nixos-rebuild --flake . "$@"
 | 
				
			||||||
 | 
					      '';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "run-vm";
 | 
					      name = "run-vm";
 | 
				
			||||||
@@ -115,29 +120,17 @@ in
 | 
				
			|||||||
      help = "Build home-manager configuration";
 | 
					      help = "Build home-manager configuration";
 | 
				
			||||||
      command = ''nix build "''${@:2}" ".#homeConfigurations.\"$1\".activationPackage"'';
 | 
					      command = ''nix build "''${@:2}" ".#homeConfigurations.\"$1\".activationPackage"'';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      name = "update-inputs";
 | 
					 | 
				
			||||||
      category = "tasks";
 | 
					 | 
				
			||||||
      help = "Update flake inputs";
 | 
					 | 
				
			||||||
      command = ''
 | 
					 | 
				
			||||||
        args=()
 | 
					 | 
				
			||||||
        for f in "$@"; do
 | 
					 | 
				
			||||||
          args+=(--update-input "$f")
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
        nix flake lock "''${args[@]}"
 | 
					 | 
				
			||||||
      '';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "update-nixpkgs";
 | 
					      name = "update-nixpkgs";
 | 
				
			||||||
      category = "tasks";
 | 
					      category = "tasks";
 | 
				
			||||||
      help = "Update nixpkgs flake inputs";
 | 
					      help = "Update nixpkgs flake inputs";
 | 
				
			||||||
      command = ''update-inputs nixpkgs-{unstable,stable,mine,mine-stable}'';
 | 
					      command = ''nix flake update nixpkgs-{unstable,stable,mine,mine-stable}'';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "update-home-manager";
 | 
					      name = "update-home-manager";
 | 
				
			||||||
      category = "tasks";
 | 
					      category = "tasks";
 | 
				
			||||||
      help = "Update home-manager flake inputs";
 | 
					      help = "Update home-manager flake inputs";
 | 
				
			||||||
      command = ''update-inputs home-manager-{unstable,stable}'';
 | 
					      command = ''nix flake update home-manager-{unstable,stable}'';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "update-installer";
 | 
					      name = "update-installer";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    NIX_USER_CONF_FILES = toString (pkgs.writeText "nix.conf"
 | 
					    NIX_USER_CONF_FILES = toString (pkgs.writeText "nix.conf"
 | 
				
			||||||
      ''
 | 
					      ''
 | 
				
			||||||
        experimental-features = nix-command flakes ca-derivations repl-flake
 | 
					        experimental-features = nix-command flakes ca-derivations
 | 
				
			||||||
        connect-timeout = 5
 | 
					        connect-timeout = 5
 | 
				
			||||||
        fallback = true
 | 
					        fallback = true
 | 
				
			||||||
        ${lib.my.c.nix.cache.conf}
 | 
					        ${lib.my.c.nix.cache.conf}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										365
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										365
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							@@ -8,14 +8,14 @@
 | 
				
			|||||||
          "ragenix",
 | 
					          "ragenix",
 | 
				
			||||||
          "nixpkgs"
 | 
					          "nixpkgs"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "systems": "systems_8"
 | 
					        "systems": "systems_7"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1707830867,
 | 
					        "lastModified": 1723293904,
 | 
				
			||||||
        "narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=",
 | 
					        "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
 | 
				
			||||||
        "owner": "ryantm",
 | 
					        "owner": "ryantm",
 | 
				
			||||||
        "repo": "agenix",
 | 
					        "repo": "agenix",
 | 
				
			||||||
        "rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6",
 | 
					        "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -24,36 +24,10 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "attic": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "crane": "crane",
 | 
					 | 
				
			||||||
        "flake-compat": "flake-compat",
 | 
					 | 
				
			||||||
        "flake-utils": "flake-utils",
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        "nixpkgs-stable": [
 | 
					 | 
				
			||||||
          "nixpkgs-stable"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1720542474,
 | 
					 | 
				
			||||||
        "narHash": "sha256-aKjJ/4l2I9+wNGTaOGRsuS3M1+IoTibqgEMPDikXm04=",
 | 
					 | 
				
			||||||
        "owner": "zhaofengli",
 | 
					 | 
				
			||||||
        "repo": "attic",
 | 
					 | 
				
			||||||
        "rev": "6139576a3ce6bb992e0f6c3022528ec233e45f00",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "zhaofengli",
 | 
					 | 
				
			||||||
        "repo": "attic",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "boardie": {
 | 
					    "boardie": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "devshell": "devshell",
 | 
					        "devshell": "devshell",
 | 
				
			||||||
        "flake-utils": "flake-utils_3",
 | 
					        "flake-utils": "flake-utils_2",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
@@ -76,17 +50,17 @@
 | 
				
			|||||||
    "borgthin": {
 | 
					    "borgthin": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "devshell": "devshell_2",
 | 
					        "devshell": "devshell_2",
 | 
				
			||||||
        "flake-utils": "flake-utils_6",
 | 
					        "flake-utils": "flake-utils_5",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-mine"
 | 
					          "nixpkgs-mine"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1692446555,
 | 
					        "lastModified": 1732994213,
 | 
				
			||||||
        "narHash": "sha256-Uzl8TiGKVBCjwYhkprSwbcu8xlcQwnDNIqsk9rM+P9w=",
 | 
					        "narHash": "sha256-3v8cTsPB+TIdWmc1gmRNd0Mi0elpfi39CXRsA/2x/Oo=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "borg",
 | 
					        "repo": "borg",
 | 
				
			||||||
        "rev": "44a3dc19b014ebc8d33db0b3e145ed7bfc9a0cb7",
 | 
					        "rev": "795f5009445987d42f32de1b49fdeb2d88326a64",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -96,39 +70,12 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "crane": {
 | 
					    "crane": {
 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					 | 
				
			||||||
          "attic",
 | 
					 | 
				
			||||||
          "nixpkgs"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1717025063,
 | 
					        "lastModified": 1725409566,
 | 
				
			||||||
        "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=",
 | 
					        "narHash": "sha256-PrtLmqhM6UtJP7v7IGyzjBFhbG4eOAHT6LPYOFmYfbk=",
 | 
				
			||||||
        "owner": "ipetkov",
 | 
					        "owner": "ipetkov",
 | 
				
			||||||
        "repo": "crane",
 | 
					        "repo": "crane",
 | 
				
			||||||
        "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e",
 | 
					        "rev": "7e4586bad4e3f8f97a9271def747cf58c4b68f3c",
 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "ipetkov",
 | 
					 | 
				
			||||||
        "repo": "crane",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "crane_2": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					 | 
				
			||||||
          "ragenix",
 | 
					 | 
				
			||||||
          "nixpkgs"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1708794349,
 | 
					 | 
				
			||||||
        "narHash": "sha256-jX+B1VGHT0ruHHL5RwS8L21R6miBn4B6s9iVyUJsJJY=",
 | 
					 | 
				
			||||||
        "owner": "ipetkov",
 | 
					 | 
				
			||||||
        "repo": "crane",
 | 
					 | 
				
			||||||
        "rev": "2c94ff9a6fbeb9f3ea0107f28688edbe9c81deaa",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -162,18 +109,18 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "deploy-rs": {
 | 
					    "deploy-rs": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-compat": "flake-compat_2",
 | 
					        "flake-compat": "flake-compat",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "utils": "utils"
 | 
					        "utils": "utils"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1718194053,
 | 
					        "lastModified": 1727447169,
 | 
				
			||||||
        "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=",
 | 
					        "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=",
 | 
				
			||||||
        "owner": "serokell",
 | 
					        "owner": "serokell",
 | 
				
			||||||
        "repo": "deploy-rs",
 | 
					        "repo": "deploy-rs",
 | 
				
			||||||
        "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a",
 | 
					        "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -184,7 +131,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "devshell": {
 | 
					    "devshell": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_2",
 | 
					        "flake-utils": "flake-utils",
 | 
				
			||||||
        "nixpkgs": "nixpkgs"
 | 
					        "nixpkgs": "nixpkgs"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -203,7 +150,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "devshell-tools": {
 | 
					    "devshell-tools": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_11",
 | 
					        "flake-utils": "flake-utils_9",
 | 
				
			||||||
        "nixpkgs": "nixpkgs_4"
 | 
					        "nixpkgs": "nixpkgs_4"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -222,7 +169,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "devshell_2": {
 | 
					    "devshell_2": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_5",
 | 
					        "flake-utils": "flake-utils_4",
 | 
				
			||||||
        "nixpkgs": "nixpkgs_3"
 | 
					        "nixpkgs": "nixpkgs_3"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -241,17 +188,16 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "devshell_3": {
 | 
					    "devshell_3": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_7",
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1713532798,
 | 
					        "lastModified": 1728330715,
 | 
				
			||||||
        "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=",
 | 
					        "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=",
 | 
				
			||||||
        "owner": "numtide",
 | 
					        "owner": "numtide",
 | 
				
			||||||
        "repo": "devshell",
 | 
					        "repo": "devshell",
 | 
				
			||||||
        "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40",
 | 
					        "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -261,22 +207,6 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-compat": {
 | 
					    "flake-compat": {
 | 
				
			||||||
      "flake": false,
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1673956053,
 | 
					 | 
				
			||||||
        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
 | 
					 | 
				
			||||||
        "owner": "edolstra",
 | 
					 | 
				
			||||||
        "repo": "flake-compat",
 | 
					 | 
				
			||||||
        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "edolstra",
 | 
					 | 
				
			||||||
        "repo": "flake-compat",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-compat_2": {
 | 
					 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1696426674,
 | 
					        "lastModified": 1696426674,
 | 
				
			||||||
@@ -293,90 +223,6 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils": {
 | 
					    "flake-utils": {
 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1667395993,
 | 
					 | 
				
			||||||
        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-utils_10": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "systems": "systems_9"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1705309234,
 | 
					 | 
				
			||||||
        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-utils_11": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "systems": "systems_10"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1709126324,
 | 
					 | 
				
			||||||
        "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "d465f4819400de7c8d874d50b982301f28a84605",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-utils_12": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "systems": "systems_11"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1705309234,
 | 
					 | 
				
			||||||
        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-utils_13": {
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1667395993,
 | 
					 | 
				
			||||||
        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "flake-utils_2": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems"
 | 
					        "systems": "systems"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -394,7 +240,40 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_3": {
 | 
					    "flake-utils_10": {
 | 
				
			||||||
 | 
					      "inputs": {
 | 
				
			||||||
 | 
					        "systems": "systems_10"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1705309234,
 | 
				
			||||||
 | 
					        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "flake-utils_11": {
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1667395993,
 | 
				
			||||||
 | 
					        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "flake-utils_2": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems_2"
 | 
					        "systems": "systems_2"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -412,7 +291,7 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_4": {
 | 
					    "flake-utils_3": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems_3"
 | 
					        "systems": "systems_3"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -430,7 +309,7 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_5": {
 | 
					    "flake-utils_4": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1642700792,
 | 
					        "lastModified": 1642700792,
 | 
				
			||||||
        "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
 | 
					        "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
 | 
				
			||||||
@@ -445,7 +324,7 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_6": {
 | 
					    "flake-utils_5": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1667395993,
 | 
					        "lastModified": 1667395993,
 | 
				
			||||||
        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
 | 
					        "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
 | 
				
			||||||
@@ -460,16 +339,31 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_7": {
 | 
					    "flake-utils_6": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems_6"
 | 
					        "systems": "systems_6"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1701680307,
 | 
					        "lastModified": 1731533236,
 | 
				
			||||||
        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
 | 
					        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
 | 
				
			||||||
        "owner": "numtide",
 | 
					        "owner": "numtide",
 | 
				
			||||||
        "repo": "flake-utils",
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
 | 
					        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "flake-utils_7": {
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1659877975,
 | 
				
			||||||
 | 
					        "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
 | 
					        "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -480,7 +374,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_8": {
 | 
					    "flake-utils_8": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems_7"
 | 
					        "systems": "systems_8"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1710146030,
 | 
					        "lastModified": 1710146030,
 | 
				
			||||||
@@ -497,12 +391,15 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_9": {
 | 
					    "flake-utils_9": {
 | 
				
			||||||
 | 
					      "inputs": {
 | 
				
			||||||
 | 
					        "systems": "systems_9"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1659877975,
 | 
					        "lastModified": 1709126324,
 | 
				
			||||||
        "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
 | 
					        "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
 | 
				
			||||||
        "owner": "numtide",
 | 
					        "owner": "numtide",
 | 
				
			||||||
        "repo": "flake-utils",
 | 
					        "repo": "flake-utils",
 | 
				
			||||||
        "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
 | 
					        "rev": "d465f4819400de7c8d874d50b982301f28a84605",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -540,16 +437,16 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1719827415,
 | 
					        "lastModified": 1732466619,
 | 
				
			||||||
        "narHash": "sha256-pvh+1hStXXAZf0sZ1xIJbWGx4u+OGBC1rVx6Wsw0fBw=",
 | 
					        "narHash": "sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "home-manager",
 | 
					        "repo": "home-manager",
 | 
				
			||||||
        "rev": "f2e3c19867262dbe84fdfab42467fc8dd83a2005",
 | 
					        "rev": "f3111f62a23451114433888902a55cf0692b408d",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
        "id": "home-manager",
 | 
					        "id": "home-manager",
 | 
				
			||||||
        "ref": "release-23.11",
 | 
					        "ref": "release-24.11",
 | 
				
			||||||
        "type": "indirect"
 | 
					        "type": "indirect"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@@ -560,11 +457,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1720734513,
 | 
					        "lastModified": 1732884235,
 | 
				
			||||||
        "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=",
 | 
					        "narHash": "sha256-r8j6R3nrvwbT1aUp4EPQ1KC7gm0pu9VcV1aNaB+XG6Q=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "home-manager",
 | 
					        "repo": "home-manager",
 | 
				
			||||||
        "rev": "90ae324e2c56af10f20549ab72014804a3064c7f",
 | 
					        "rev": "819f682269f4e002884702b87e445c82840c68f2",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -574,11 +471,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "impermanence": {
 | 
					    "impermanence": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1719091691,
 | 
					        "lastModified": 1731242966,
 | 
				
			||||||
        "narHash": "sha256-AxaLX5cBEcGtE02PeGsfscSb/fWMnyS7zMWBXQWDKbE=",
 | 
					        "narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "impermanence",
 | 
					        "repo": "impermanence",
 | 
				
			||||||
        "rev": "23c1f06316b67cb5dabdfe2973da3785cfe9c34a",
 | 
					        "rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -611,7 +508,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixGL": {
 | 
					    "nixGL": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_9",
 | 
					        "flake-utils": "flake-utils_7",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
@@ -648,11 +545,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-mine": {
 | 
					    "nixpkgs-mine": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1724669894,
 | 
					        "lastModified": 1732985787,
 | 
				
			||||||
        "narHash": "sha256-oHDWt37dN3Bq12E016HDw0rnjBlRg51hg66b7qG6cro=",
 | 
					        "narHash": "sha256-6rSJ9L4QywpHLi/xvpOHdTuPm6/eOJcXxnYzDbP3U1k=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "01d95eaee35f63ed8e48dedb573f48a1a3028f88",
 | 
					        "rev": "a28c46933ef5038fb7a2dd483b85152a539c7969",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -664,11 +561,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-mine-stable": {
 | 
					    "nixpkgs-mine-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1720987393,
 | 
					        "lastModified": 1732985894,
 | 
				
			||||||
        "narHash": "sha256-aq1reu43552gD+QRyxAMlimAX9+YbGpAIyw82jg0eWY=",
 | 
					        "narHash": "sha256-YYuQQCcSF6KjgtAenZJiBmqt5jqP3UvYgC424VQ+22s=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "154ab603fb2b794b437f233853aeb3c75f101049",
 | 
					        "rev": "e0a3f4e2bbc5f7b681e344b389dcbab23f2e92a8",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -680,26 +577,26 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-stable": {
 | 
					    "nixpkgs-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1720535198,
 | 
					        "lastModified": 1732824227,
 | 
				
			||||||
        "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=",
 | 
					        "narHash": "sha256-fYNXgpu1AEeLyd3fQt4Ym0tcVP7cdJ8wRoqJ+CtTRyY=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5",
 | 
					        "rev": "c71ad5c34d51dcbda4c15f44ea4e4aa6bb6ac1e9",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
        "id": "nixpkgs",
 | 
					        "id": "nixpkgs",
 | 
				
			||||||
        "ref": "nixos-23.11",
 | 
					        "ref": "nixos-24.11",
 | 
				
			||||||
        "type": "indirect"
 | 
					        "type": "indirect"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-unstable": {
 | 
					    "nixpkgs-unstable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1723175592,
 | 
					        "lastModified": 1732758367,
 | 
				
			||||||
        "narHash": "sha256-M0xJ3FbDUc4fRZ84dPGx5VvgFsOzds77KiBMW/mMTnI=",
 | 
					        "narHash": "sha256-RzaI1RO0UXqLjydtz3GAXSTzHkpb/lLD1JD8a0W4Wpo=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "5e0ca22929f3342b19569b21b2f3462f053e497b",
 | 
					        "rev": "fa42b5a5f401aab8a32bd33c9a4de0738180dc59",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -774,7 +671,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "poetry2nix": {
 | 
					    "poetry2nix": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_4",
 | 
					        "flake-utils": "flake-utils_3",
 | 
				
			||||||
        "nix-github-actions": "nix-github-actions",
 | 
					        "nix-github-actions": "nix-github-actions",
 | 
				
			||||||
        "nixpkgs": "nixpkgs_2",
 | 
					        "nixpkgs": "nixpkgs_2",
 | 
				
			||||||
        "systems": "systems_4",
 | 
					        "systems": "systems_4",
 | 
				
			||||||
@@ -797,19 +694,19 @@
 | 
				
			|||||||
    "ragenix": {
 | 
					    "ragenix": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "agenix": "agenix",
 | 
					        "agenix": "agenix",
 | 
				
			||||||
        "crane": "crane_2",
 | 
					        "crane": "crane",
 | 
				
			||||||
        "flake-utils": "flake-utils_10",
 | 
					        "flake-utils": "flake-utils_8",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "rust-overlay": "rust-overlay"
 | 
					        "rust-overlay": "rust-overlay"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1725195663,
 | 
					        "lastModified": 1731774781,
 | 
				
			||||||
        "narHash": "sha256-vnmQ0tMkQpiOW5xvM9WVVDLr4OjYKquq0iOaAlPriqA=",
 | 
					        "narHash": "sha256-vwsUUYOIs8J6weeSK1n1mbZf8fgvygGUMsadx0JmG70=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "ragenix",
 | 
					        "repo": "ragenix",
 | 
				
			||||||
        "rev": "58820d99352a5e7067ec98374b8c4519c8e225b6",
 | 
					        "rev": "ec4115da7b67c783b1091811e17dbcba50edd1c6",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -821,12 +718,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "root": {
 | 
					    "root": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "attic": "attic",
 | 
					 | 
				
			||||||
        "boardie": "boardie",
 | 
					        "boardie": "boardie",
 | 
				
			||||||
        "borgthin": "borgthin",
 | 
					        "borgthin": "borgthin",
 | 
				
			||||||
        "deploy-rs": "deploy-rs",
 | 
					        "deploy-rs": "deploy-rs",
 | 
				
			||||||
        "devshell": "devshell_3",
 | 
					        "devshell": "devshell_3",
 | 
				
			||||||
        "flake-utils": "flake-utils_8",
 | 
					        "flake-utils": "flake-utils_6",
 | 
				
			||||||
        "home-manager-stable": "home-manager-stable",
 | 
					        "home-manager-stable": "home-manager-stable",
 | 
				
			||||||
        "home-manager-unstable": "home-manager-unstable",
 | 
					        "home-manager-unstable": "home-manager-unstable",
 | 
				
			||||||
        "impermanence": "impermanence",
 | 
					        "impermanence": "impermanence",
 | 
				
			||||||
@@ -841,21 +737,17 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "rust-overlay": {
 | 
					    "rust-overlay": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": [
 | 
					 | 
				
			||||||
          "ragenix",
 | 
					 | 
				
			||||||
          "flake-utils"
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "ragenix",
 | 
					          "ragenix",
 | 
				
			||||||
          "nixpkgs"
 | 
					          "nixpkgs"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1708740535,
 | 
					        "lastModified": 1725675754,
 | 
				
			||||||
        "narHash": "sha256-NCTw235XwSDbeTAtAwg/hOeNOgwYhVq7JjDdbkOgBeA=",
 | 
					        "narHash": "sha256-hXW3csqePOcF2e/PYnpXj72KEYyNj2HzTrVNmS/F7Ug=",
 | 
				
			||||||
        "owner": "oxalica",
 | 
					        "owner": "oxalica",
 | 
				
			||||||
        "repo": "rust-overlay",
 | 
					        "repo": "rust-overlay",
 | 
				
			||||||
        "rev": "9b24383d77f598716fa0cbb8b48c97249f5ee1af",
 | 
					        "rev": "8cc45e678e914a16c8e224c3237fb07cf21e5e54",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -866,7 +758,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "sbt": {
 | 
					    "sbt": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-utils": "flake-utils_13",
 | 
					        "flake-utils": "flake-utils_11",
 | 
				
			||||||
        "nixpkgs": "nixpkgs_5"
 | 
					        "nixpkgs": "nixpkgs_5"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -886,7 +778,7 @@
 | 
				
			|||||||
    "sharry": {
 | 
					    "sharry": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "devshell-tools": "devshell-tools",
 | 
					        "devshell-tools": "devshell-tools",
 | 
				
			||||||
        "flake-utils": "flake-utils_12",
 | 
					        "flake-utils": "flake-utils_10",
 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs-unstable"
 | 
					          "nixpkgs-unstable"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
@@ -936,21 +828,6 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "systems_11": {
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1681028828,
 | 
					 | 
				
			||||||
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
 | 
					 | 
				
			||||||
        "owner": "nix-systems",
 | 
					 | 
				
			||||||
        "repo": "default",
 | 
					 | 
				
			||||||
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "nix-systems",
 | 
					 | 
				
			||||||
        "repo": "default",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "systems_2": {
 | 
					    "systems_2": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1681028828,
 | 
					        "lastModified": 1681028828,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								flake.nix
									
									
									
									
									
								
							@@ -7,13 +7,13 @@
 | 
				
			|||||||
    devshell.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
					    devshell.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
 | 
					    nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
 | 
				
			||||||
    nixpkgs-stable.url = "nixpkgs/nixos-23.11";
 | 
					    nixpkgs-stable.url = "nixpkgs/nixos-24.11";
 | 
				
			||||||
    nixpkgs-mine.url = "github:devplayer0/nixpkgs/devplayer0";
 | 
					    nixpkgs-mine.url = "github:devplayer0/nixpkgs/devplayer0";
 | 
				
			||||||
    nixpkgs-mine-stable.url = "github:devplayer0/nixpkgs/devplayer0-stable";
 | 
					    nixpkgs-mine-stable.url = "github:devplayer0/nixpkgs/devplayer0-stable";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    home-manager-unstable.url = "home-manager";
 | 
					    home-manager-unstable.url = "home-manager";
 | 
				
			||||||
    home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
					    home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
				
			||||||
    home-manager-stable.url = "home-manager/release-23.11";
 | 
					    home-manager-stable.url = "home-manager/release-24.11";
 | 
				
			||||||
    home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable";
 | 
					    home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Stuff used by the flake for build / deployment
 | 
					    # Stuff used by the flake for build / deployment
 | 
				
			||||||
@@ -35,9 +35,6 @@
 | 
				
			|||||||
    sharry.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
					    sharry.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
				
			||||||
    borgthin.url = "github:devplayer0/borg";
 | 
					    borgthin.url = "github:devplayer0/borg";
 | 
				
			||||||
    borgthin.inputs.nixpkgs.follows = "nixpkgs-mine";
 | 
					    borgthin.inputs.nixpkgs.follows = "nixpkgs-mine";
 | 
				
			||||||
    attic.url = "github:zhaofengli/attic";
 | 
					 | 
				
			||||||
    attic.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
					 | 
				
			||||||
    attic.inputs.nixpkgs-stable.follows = "nixpkgs-stable";
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs =
 | 
					  outputs =
 | 
				
			||||||
@@ -96,7 +93,6 @@
 | 
				
			|||||||
            inputs.ragenix.overlays.default
 | 
					            inputs.ragenix.overlays.default
 | 
				
			||||||
            inputs.deploy-rs.overlay
 | 
					            inputs.deploy-rs.overlay
 | 
				
			||||||
            (flakePackageOverlay inputs.home-manager-unstable system)
 | 
					            (flakePackageOverlay inputs.home-manager-unstable system)
 | 
				
			||||||
            inputs.attic.overlays.default
 | 
					 | 
				
			||||||
          ];
 | 
					          ];
 | 
				
			||||||
        }))
 | 
					        }))
 | 
				
			||||||
        pkgsFlakes;
 | 
					        pkgsFlakes;
 | 
				
			||||||
@@ -208,8 +204,9 @@
 | 
				
			|||||||
        systems' = mapAttrs' (n: v: nameValuePair "system-${n}" v) systems;
 | 
					        systems' = mapAttrs' (n: v: nameValuePair "system-${n}" v) systems;
 | 
				
			||||||
        packages' = mapAttrs' (n: v: nameValuePair "package-${n}" v) packages;
 | 
					        packages' = mapAttrs' (n: v: nameValuePair "package-${n}" v) packages;
 | 
				
			||||||
      in
 | 
					      in
 | 
				
			||||||
        pkgs.linkFarm "ci" (homes' // systems' // packages' // {
 | 
					        homes' // systems' // packages' // {
 | 
				
			||||||
          inherit shell;
 | 
					          inherit shell;
 | 
				
			||||||
        });
 | 
					        };
 | 
				
			||||||
 | 
					      ciDrv = pkgs.linkFarm "ci" ci;
 | 
				
			||||||
    }));
 | 
					    }));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{ lib, pkgs', pkgs, config, ... }:
 | 
					{ lib, pkgs', pkgs, config, ... }:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  inherit (lib) genAttrs mkIf mkMerge mkForce;
 | 
					  inherit (lib) genAttrs mkIf mkMerge mkForce mapAttrs mkOptionDefault;
 | 
				
			||||||
  inherit (lib.my) mkBoolOpt';
 | 
					  inherit (lib.my) mkBoolOpt';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cfg = config.my.gui;
 | 
					  cfg = config.my.gui;
 | 
				
			||||||
@@ -39,10 +39,11 @@ in
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
        home = {
 | 
					        home = {
 | 
				
			||||||
          packages = with pkgs; [
 | 
					          packages = with pkgs; [
 | 
				
			||||||
 | 
					            xdg-utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            font.package
 | 
					            font.package
 | 
				
			||||||
            (nerdfonts.override {
 | 
					            nerd-fonts.sauce-code-pro
 | 
				
			||||||
              fonts = [ "DroidSansMono" "SourceCodePro" ];
 | 
					            nerd-fonts.droid-sans-mono
 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            noto-fonts-emoji
 | 
					            noto-fonts-emoji
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            grim
 | 
					            grim
 | 
				
			||||||
@@ -78,7 +79,7 @@ in
 | 
				
			|||||||
          alacritty = {
 | 
					          alacritty = {
 | 
				
			||||||
            enable = true;
 | 
					            enable = true;
 | 
				
			||||||
            settings = {
 | 
					            settings = {
 | 
				
			||||||
              import = [ ./alacritty-xterm.toml ];
 | 
					              general.import = [ ./alacritty-xterm.toml ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              font = {
 | 
					              font = {
 | 
				
			||||||
                size = font.size;
 | 
					                size = font.size;
 | 
				
			||||||
@@ -97,6 +98,7 @@ in
 | 
				
			|||||||
              background_opacity = "0.65";
 | 
					              background_opacity = "0.65";
 | 
				
			||||||
              tab_bar_edge = "top";
 | 
					              tab_bar_edge = "top";
 | 
				
			||||||
              shell_integration = "no-sudo";
 | 
					              shell_integration = "no-sudo";
 | 
				
			||||||
 | 
					              font_features = "${font.name} -liga";
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -184,6 +186,7 @@ in
 | 
				
			|||||||
            wl-clipboard
 | 
					            wl-clipboard
 | 
				
			||||||
            wev
 | 
					            wev
 | 
				
			||||||
            wdisplays
 | 
					            wdisplays
 | 
				
			||||||
 | 
					            swaysome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            pavucontrol
 | 
					            pavucontrol
 | 
				
			||||||
            libsecret
 | 
					            libsecret
 | 
				
			||||||
@@ -206,9 +209,36 @@ in
 | 
				
			|||||||
        xsession.preferStatusNotifierItems = true;
 | 
					        xsession.preferStatusNotifierItems = true;
 | 
				
			||||||
        wayland = {
 | 
					        wayland = {
 | 
				
			||||||
          windowManager = {
 | 
					          windowManager = {
 | 
				
			||||||
            sway = {
 | 
					            sway =
 | 
				
			||||||
 | 
					            let
 | 
				
			||||||
 | 
					              cfg = config.wayland.windowManager.sway.config;
 | 
				
			||||||
 | 
					              mod = cfg.modifier;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              renameWs = pkgs.writeShellScript "sway-rename-ws" ''
 | 
				
			||||||
 | 
					                focused_ws="$(swaymsg -t get_workspaces | jq ".[] | select(.focused)")"
 | 
				
			||||||
 | 
					                focused_num="$(jq -r ".num" <<< "$focused_ws")"
 | 
				
			||||||
 | 
					                focused_name="$(jq -r ".name" <<< "$focused_ws")"
 | 
				
			||||||
 | 
					                placeholder="$(sed -E 's/[0-9]+: //' <<< "$focused_name")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                name="$(rofi -dmenu -p "rename ws $focused_num" -theme+entry+placeholder "\"$placeholder\"")"
 | 
				
			||||||
 | 
					                if [ -n "$name" ]; then
 | 
				
			||||||
 | 
					                  swaymsg rename workspace "$focused_name" to "$focused_num: $name"
 | 
				
			||||||
 | 
					                fi
 | 
				
			||||||
 | 
					              '';
 | 
				
			||||||
 | 
					              clearWsName = pkgs.writeShellScript "sway-clear-ws-name" ''
 | 
				
			||||||
 | 
					                focused_ws="$(swaymsg -t get_workspaces | jq ".[] | select(.focused)")"
 | 
				
			||||||
 | 
					                focused_num="$(jq -r ".num" <<< "$focused_ws")"
 | 
				
			||||||
 | 
					                focused_name="$(jq -r ".name" <<< "$focused_ws")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                swaymsg rename workspace "$focused_name" to "$focused_num"
 | 
				
			||||||
 | 
					              '';
 | 
				
			||||||
 | 
					            in
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
              xwayland = true;
 | 
					              xwayland = true;
 | 
				
			||||||
 | 
					              extraConfigEarly = ''
 | 
				
			||||||
 | 
					                set $mod ${mod}
 | 
				
			||||||
 | 
					              '';
 | 
				
			||||||
              config = {
 | 
					              config = {
 | 
				
			||||||
                input = {
 | 
					                input = {
 | 
				
			||||||
                  "type:touchpad" = {
 | 
					                  "type:touchpad" = {
 | 
				
			||||||
@@ -223,23 +253,87 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                modifier = "Mod4";
 | 
					                modifier = "Mod4";
 | 
				
			||||||
                terminal = "kitty";
 | 
					                terminal = "kitty";
 | 
				
			||||||
                keybindings =
 | 
					                keybindings = mapAttrs (k: mkOptionDefault) {
 | 
				
			||||||
                  let
 | 
					                  "${mod}+Left" = "focus left";
 | 
				
			||||||
                    cfg = config.wayland.windowManager.sway.config;
 | 
					                  "${mod}+Down" = "focus down";
 | 
				
			||||||
                    mod = cfg.modifier;
 | 
					                  "${mod}+Up" = "focus up";
 | 
				
			||||||
                  in
 | 
					                  "${mod}+Right" = "focus right";
 | 
				
			||||||
                  lib.mkOptionDefault {
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+Shift+Left" = "move left";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+Down" = "move down";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+Up" = "move up";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+Right" = "move right";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+b" = "splith";
 | 
				
			||||||
 | 
					                  "${mod}+v" = "splitv";
 | 
				
			||||||
 | 
					                  "${mod}+f" = "fullscreen toggle";
 | 
				
			||||||
 | 
					                  "${mod}+a" = "focus parent";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+s" = "layout stacking";
 | 
				
			||||||
 | 
					                  "${mod}+w" = "layout tabbed";
 | 
				
			||||||
 | 
					                  "${mod}+e" = "layout toggle split";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+Shift+space" = "floating toggle";
 | 
				
			||||||
 | 
					                  "${mod}+space" = "focus mode_toggle";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+1" = "workspace number 1";
 | 
				
			||||||
 | 
					                  "${mod}+2" = "workspace number 2";
 | 
				
			||||||
 | 
					                  "${mod}+3" = "workspace number 3";
 | 
				
			||||||
 | 
					                  "${mod}+4" = "workspace number 4";
 | 
				
			||||||
 | 
					                  "${mod}+5" = "workspace number 5";
 | 
				
			||||||
 | 
					                  "${mod}+6" = "workspace number 6";
 | 
				
			||||||
 | 
					                  "${mod}+7" = "workspace number 7";
 | 
				
			||||||
 | 
					                  "${mod}+8" = "workspace number 8";
 | 
				
			||||||
 | 
					                  "${mod}+9" = "workspace number 9";
 | 
				
			||||||
 | 
					                  "${mod}+0" = "workspace number 10";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+Shift+1" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 1";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+2" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 2";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+3" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 3";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+4" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 4";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+5" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 5";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+6" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 6";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+7" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 7";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+8" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 8";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+9" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 9";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+0" =
 | 
				
			||||||
 | 
					                    "move container to workspace number 10";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+Shift+minus" = "move scratchpad";
 | 
				
			||||||
 | 
					                  "${mod}+minus" = "scratchpad show";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "${mod}+Return" = "exec ${cfg.terminal}";
 | 
				
			||||||
 | 
					                  "${mod}+r" = "mode resize";
 | 
				
			||||||
                  "${mod}+d" = null;
 | 
					                  "${mod}+d" = null;
 | 
				
			||||||
                  "${mod}+l" = "exec ${doomsaver}/bin/doomsaver";
 | 
					                  "${mod}+l" = "exec ${doomsaver}/bin/doomsaver";
 | 
				
			||||||
 | 
					                  "${mod}+q" = "kill";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+c" = "reload";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+q" = "exec swaynag -t warning -m 'bruh you really wanna kill sway?' -b 'ye' 'systemctl --user stop graphical-session.target && swaymsg exit'";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  # rofi
 | 
				
			||||||
                  "${mod}+x" = "exec ${cfg.menu}";
 | 
					                  "${mod}+x" = "exec ${cfg.menu}";
 | 
				
			||||||
                  "${mod}+Shift+x" = "exec rofi -show drun";
 | 
					                  "${mod}+Shift+x" = "exec rofi -show drun";
 | 
				
			||||||
                    "${mod}+q" = "kill";
 | 
					 | 
				
			||||||
                    "${mod}+Shift+q" = "exec swaynag -t warning -m 'bruh you really wanna kill sway?' -b 'ye' 'systemctl --user stop graphical-session.target && swaymsg exit'";
 | 
					 | 
				
			||||||
                    "${mod}+Shift+d" = ''exec grim - | swappy -f -'';
 | 
					 | 
				
			||||||
                    "${mod}+Shift+s" = ''exec grim -g "$(slurp)" - | swappy -f -'';
 | 
					 | 
				
			||||||
                  "${mod}+Shift+e" = "exec rofi -show emoji";
 | 
					                  "${mod}+Shift+e" = "exec rofi -show emoji";
 | 
				
			||||||
                  # Config for this doesn't seem to work :/
 | 
					                  # Config for this doesn't seem to work :/
 | 
				
			||||||
                  "${mod}+c" = ''exec rofi -show calc -calc-command "echo -n '{result}' | ${pkgs.wl-clipboard}/bin/wl-copy"'';
 | 
					                  "${mod}+c" = ''exec rofi -show calc -calc-command "echo -n '{result}' | ${pkgs.wl-clipboard}/bin/wl-copy"'';
 | 
				
			||||||
 | 
					                  "${mod}+Shift+r" = "exec ${renameWs}";
 | 
				
			||||||
 | 
					                  "${mod}+Shift+n" = "exec ${clearWsName}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  # Screenshots
 | 
				
			||||||
 | 
					                  "${mod}+Shift+d" = ''exec grim - | swappy -f -'';
 | 
				
			||||||
 | 
					                  "${mod}+Shift+s" = ''exec grim -g "$(slurp)" - | swappy -f -'';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 5%-";
 | 
				
			||||||
 | 
					                  "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set +5%";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  "XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
 | 
					                  "XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
 | 
				
			||||||
                  "XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
 | 
					                  "XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
 | 
				
			||||||
@@ -256,6 +350,9 @@ in
 | 
				
			|||||||
                menu = "rofi -show run";
 | 
					                menu = "rofi -show run";
 | 
				
			||||||
                bars = mkForce [ ];
 | 
					                bars = mkForce [ ];
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 | 
					              extraConfig = ''
 | 
				
			||||||
 | 
					                include ${./swaysome.conf}
 | 
				
			||||||
 | 
					              '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              swaynag = {
 | 
					              swaynag = {
 | 
				
			||||||
                enable = true;
 | 
					                enable = true;
 | 
				
			||||||
@@ -314,11 +411,13 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          waybar = import ./waybar.nix { inherit lib pkgs config font; };
 | 
					          waybar = import ./waybar.nix { inherit lib pkgs config font; };
 | 
				
			||||||
          rofi = {
 | 
					          rofi = {
 | 
				
			||||||
 | 
					            package = pkgs.rofi-wayland;
 | 
				
			||||||
            enable = true;
 | 
					            enable = true;
 | 
				
			||||||
            font = "${font.name} ${toString font.size}";
 | 
					            font = "${font.name} ${toString font.size}";
 | 
				
			||||||
            plugins = with pkgs; [
 | 
					            plugins = with pkgs; (map (p: p.override { rofi-unwrapped = rofi-wayland-unwrapped; }) [
 | 
				
			||||||
              rofi-calc
 | 
					              rofi-calc
 | 
				
			||||||
              rofi-emoji
 | 
					            ]) ++ [
 | 
				
			||||||
 | 
					              rofi-emoji-wayland
 | 
				
			||||||
            ];
 | 
					            ];
 | 
				
			||||||
            extraConfig = {
 | 
					            extraConfig = {
 | 
				
			||||||
              modes = "window,run,ssh,filebrowser,calc,emoji";
 | 
					              modes = "window,run,ssh,filebrowser,calc,emoji";
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										66
									
								
								home-manager/modules/gui/swaysome.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								home-manager/modules/gui/swaysome.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					# Use (un)bindcode or (un)bindsym, depending on what you used in your main sway config file.
 | 
				
			||||||
 | 
					# The `--no-warn` setting is only added to shortcuts that exist in the default config. You may want to add or remove
 | 
				
			||||||
 | 
					# that flag on some bindings depending on your config.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Change focus between workspaces
 | 
				
			||||||
 | 
					bindsym $mod+Alt+1 exec "swaysome focus 1"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+2 exec "swaysome focus 2"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+3 exec "swaysome focus 3"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+4 exec "swaysome focus 4"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+5 exec "swaysome focus 5"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+6 exec "swaysome focus 6"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+7 exec "swaysome focus 7"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+8 exec "swaysome focus 8"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+9 exec "swaysome focus 9"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+0 exec "swaysome focus 0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Focus workspace groups
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+1 exec "swaysome focus-group 1"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+2 exec "swaysome focus-group 2"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+3 exec "swaysome focus-group 3"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+4 exec "swaysome focus-group 4"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+5 exec "swaysome focus-group 5"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+6 exec "swaysome focus-group 6"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+7 exec "swaysome focus-group 7"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+8 exec "swaysome focus-group 8"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+9 exec "swaysome focus-group 9"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+0 exec "swaysome focus-group 0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Move containers between workspaces
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+1 exec "swaysome move 1"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+2 exec "swaysome move 2"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+3 exec "swaysome move 3"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+4 exec "swaysome move 4"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+5 exec "swaysome move 5"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+6 exec "swaysome move 6"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+7 exec "swaysome move 7"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+8 exec "swaysome move 8"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+9 exec "swaysome move 9"
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Shift+0 exec "swaysome move 0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Move containers to other workspace groups
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+1 exec "swaysome move-to-group 1"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+2 exec "swaysome move-to-group 2"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+3 exec "swaysome move-to-group 3"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+4 exec "swaysome move-to-group 4"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+5 exec "swaysome move-to-group 5"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+6 exec "swaysome move-to-group 6"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+7 exec "swaysome move-to-group 7"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+8 exec "swaysome move-to-group 8"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+9 exec "swaysome move-to-group 9"
 | 
				
			||||||
 | 
					bindsym --no-warn $mod+Shift+0 exec "swaysome move-to-group 0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Move focused container to next output
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Right exec "swaysome next-output"
 | 
				
			||||||
 | 
					# Move focused container to previous output
 | 
				
			||||||
 | 
					bindsym $mod+Alt+Left exec "swaysome prev-output"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Move focused workspace group to next output
 | 
				
			||||||
 | 
					bindsym $mod+Shift+Alt+Right exec "swaysome workspace-group-next-output"
 | 
				
			||||||
 | 
					# Move focused workspace group to previous output
 | 
				
			||||||
 | 
					bindsym $mod+Shift+Alt+Left exec "swaysome workspace-group-prev-output"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Init workspaces for every screen
 | 
				
			||||||
 | 
					exec "swaysome init 1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,7 +27,7 @@ rec {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  kernel = {
 | 
					  kernel = {
 | 
				
			||||||
    lts = pkgs: pkgs.linuxKernel.packages.linux_6_6;
 | 
					    lts = pkgs: pkgs.linuxKernel.packages.linux_6_6;
 | 
				
			||||||
    latest = pkgs: pkgs.linuxKernel.packages.linux_6_9;
 | 
					    latest = pkgs: pkgs.linuxKernel.packages.linux_6_12;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nginx = rec {
 | 
					  nginx = rec {
 | 
				
			||||||
@@ -228,6 +228,17 @@ rec {
 | 
				
			|||||||
        proto = "udp";
 | 
					        proto = "udp";
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        port = 15636;
 | 
				
			||||||
 | 
					        dst = aa.enshrouded-oci.internal.ipv4.address;
 | 
				
			||||||
 | 
					        proto = "udp";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        port = 15637;
 | 
				
			||||||
 | 
					        dst = aa.enshrouded-oci.internal.ipv4.address;
 | 
				
			||||||
 | 
					        proto = "udp";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        port = qclk.wgPort;
 | 
					        port = qclk.wgPort;
 | 
				
			||||||
        dst = aa.qclk.internal.ipv4.address;
 | 
					        dst = aa.qclk.internal.ipv4.address;
 | 
				
			||||||
@@ -256,7 +267,7 @@ rec {
 | 
				
			|||||||
      "stream"
 | 
					      "stream"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
    routersPubV4 = [
 | 
					    routersPubV4 = [
 | 
				
			||||||
      "80.111.122.16"
 | 
					      "109.255.31.155"
 | 
				
			||||||
      "109.255.252.63"
 | 
					      "109.255.252.63"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -248,8 +248,8 @@ rec {
 | 
				
			|||||||
  in
 | 
					  in
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    trivial = prev.trivial // {
 | 
					    trivial = prev.trivial // {
 | 
				
			||||||
      release = "24.07:u-${prev.trivial.release}";
 | 
					      release = "24.12:u-${prev.trivial.release}";
 | 
				
			||||||
      codeName = "Diffed";
 | 
					      codeName = "Epic";
 | 
				
			||||||
      revisionWithDefault = default: self.rev or default;
 | 
					      revisionWithDefault = default: self.rev or default;
 | 
				
			||||||
      versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}";
 | 
					      versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,7 +106,7 @@ in
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    matchConfig.Name = "as211024";
 | 
					                    matchConfig.Name = "as211024";
 | 
				
			||||||
                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
					                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
				
			||||||
                    routes = map (r: { routeConfig = r; }) [
 | 
					                    routes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        Destination = lib.my.c.colony.prefixes.all.v4;
 | 
					                        Destination = lib.my.c.colony.prefixes.all.v4;
 | 
				
			||||||
                        Gateway = allAssignments.estuary.as211024.ipv4.address;
 | 
					                        Gateway = allAssignments.estuary.as211024.ipv4.address;
 | 
				
			||||||
@@ -123,7 +123,7 @@ in
 | 
				
			|||||||
                        Table = "ts-extra";
 | 
					                        Table = "ts-extra";
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                    routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [
 | 
					                    routingPolicyRules = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        IncomingInterface = "tailscale0";
 | 
					                        IncomingInterface = "tailscale0";
 | 
				
			||||||
                        To = lib.my.c.colony.prefixes.all.v6;
 | 
					                        To = lib.my.c.colony.prefixes.all.v6;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,7 +80,7 @@ in
 | 
				
			|||||||
              };
 | 
					              };
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            "ts.${pubDomain}" = {
 | 
					            "hs.${pubDomain}" = {
 | 
				
			||||||
              locations."/" = {
 | 
					              locations."/" = {
 | 
				
			||||||
                proxyPass = "http://localhost:${toString config.services.headscale.port}";
 | 
					                proxyPass = "http://localhost:${toString config.services.headscale.port}";
 | 
				
			||||||
                proxyWebsockets = true;
 | 
					                proxyWebsockets = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,11 @@
 | 
				
			|||||||
{ lib, pkgs, config, assignments, allAssignments, ... }:
 | 
					{ lib, pkgs, config, assignments, allAssignments, ... }:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
 | 
					  inherit (lib) concatStringsSep;
 | 
				
			||||||
  inherit (lib.my.c) pubDomain;
 | 
					  inherit (lib.my.c) pubDomain;
 | 
				
			||||||
  inherit (lib.my.c.britway) prefixes domain;
 | 
					  inherit (lib.my.c.britway) prefixes domain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Can't use overrideAttrs because we need to override `vendorHash` within `buildGoModule`
 | 
					  # Can't use overrideAttrs because we need to override `vendorHash` within `buildGoModule`
 | 
				
			||||||
  headscale = (pkgs.headscale.override {
 | 
					  headscale' = (pkgs.headscale.override {
 | 
				
			||||||
    buildGoModule = args: pkgs.buildGoModule (args // rec {
 | 
					    buildGoModule = args: pkgs.buildGoModule (args // rec {
 | 
				
			||||||
      version = "0.23.0-alpha12";
 | 
					      version = "0.23.0-alpha12";
 | 
				
			||||||
      src = pkgs.fetchFromGitHub {
 | 
					      src = pkgs.fetchFromGitHub {
 | 
				
			||||||
@@ -19,6 +20,10 @@ let
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  advRoutes = concatStringsSep "," [
 | 
				
			||||||
 | 
					    lib.my.c.home.prefixes.all.v4
 | 
				
			||||||
 | 
					    lib.my.c.home.prefixes.all.v6
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
  pubNameservers = [
 | 
					  pubNameservers = [
 | 
				
			||||||
    "1.1.1.1"
 | 
					    "1.1.1.1"
 | 
				
			||||||
    "1.0.0.1"
 | 
					    "1.0.0.1"
 | 
				
			||||||
@@ -36,21 +41,20 @@ in
 | 
				
			|||||||
    services = {
 | 
					    services = {
 | 
				
			||||||
      headscale = {
 | 
					      headscale = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        package = headscale;
 | 
					 | 
				
			||||||
        settings = {
 | 
					        settings = {
 | 
				
			||||||
          disable_check_updates = true;
 | 
					          disable_check_updates = true;
 | 
				
			||||||
          unix_socket_permission = "0770";
 | 
					          unix_socket_permission = "0770";
 | 
				
			||||||
          server_url = "https://ts.${pubDomain}";
 | 
					          server_url = "https://hs.${pubDomain}";
 | 
				
			||||||
          database = {
 | 
					          database = {
 | 
				
			||||||
            type = "sqlite3";
 | 
					            type = "sqlite3";
 | 
				
			||||||
            sqlite.path = "/var/lib/headscale/db.sqlite3";
 | 
					            sqlite.path = "/var/lib/headscale/db.sqlite3";
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
          noise.private_key_path = "/var/lib/headscale/noise_private.key";
 | 
					          noise.private_key_path = "/var/lib/headscale/noise_private.key";
 | 
				
			||||||
          prefixes = with lib.my.c.tailscale.prefix; { inherit v4 v6; };
 | 
					          prefixes = with lib.my.c.tailscale.prefix; { inherit v4 v6; };
 | 
				
			||||||
          dns_config = {
 | 
					          dns = {
 | 
				
			||||||
            # Use IPs that will route inside the VPN to prevent interception
 | 
					            # Use IPs that will route inside the VPN to prevent interception
 | 
				
			||||||
            # (e.g. DNS rebinding filtering)
 | 
					            # (e.g. DNS rebinding filtering)
 | 
				
			||||||
            restricted_nameservers = {
 | 
					            nameservers.split = {
 | 
				
			||||||
              "${domain}" = pubNameservers;
 | 
					              "${domain}" = pubNameservers;
 | 
				
			||||||
              "${lib.my.c.colony.domain}" = with allAssignments.estuary.base; [
 | 
					              "${lib.my.c.colony.domain}" = with allAssignments.estuary.base; [
 | 
				
			||||||
                ipv4.address ipv6.address
 | 
					                ipv4.address ipv6.address
 | 
				
			||||||
@@ -64,7 +68,6 @@ in
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
            magic_dns = true;
 | 
					            magic_dns = true;
 | 
				
			||||||
            base_domain = "ts.${pubDomain}";
 | 
					            base_domain = "ts.${pubDomain}";
 | 
				
			||||||
            override_local_dns = false;
 | 
					 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
          oidc = {
 | 
					          oidc = {
 | 
				
			||||||
            only_start_if_oidc_is_available = true;
 | 
					            only_start_if_oidc_is_available = true;
 | 
				
			||||||
@@ -84,9 +87,10 @@ in
 | 
				
			|||||||
        interfaceName = "tailscale0";
 | 
					        interfaceName = "tailscale0";
 | 
				
			||||||
        extraUpFlags = [
 | 
					        extraUpFlags = [
 | 
				
			||||||
          "--operator=${config.my.user.config.name}"
 | 
					          "--operator=${config.my.user.config.name}"
 | 
				
			||||||
          "--login-server=https://ts.nul.ie"
 | 
					          "--login-server=https://hs.nul.ie"
 | 
				
			||||||
          "--netfilter-mode=off"
 | 
					          "--netfilter-mode=off"
 | 
				
			||||||
          "--advertise-exit-node"
 | 
					          "--advertise-exit-node"
 | 
				
			||||||
 | 
					          "--advertise-routes=${advRoutes}"
 | 
				
			||||||
          "--accept-routes=false"
 | 
					          "--accept-routes=false"
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -252,10 +252,10 @@ in
 | 
				
			|||||||
                  };
 | 
					                  };
 | 
				
			||||||
                  ipv6Prefixes = [
 | 
					                  ipv6Prefixes = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      ipv6PrefixConfig.Prefix = prefixes.vms.v6;
 | 
					                      Prefix = prefixes.vms.v6;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                  ];
 | 
					                  ];
 | 
				
			||||||
                  routes = map (r: { routeConfig = r; }) [
 | 
					                  routes = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      Destination = prefixes.ctrs.v4;
 | 
					                      Destination = prefixes.ctrs.v4;
 | 
				
			||||||
                      Gateway = allAssignments.shill.routing.ipv4.address;
 | 
					                      Gateway = allAssignments.shill.routing.ipv4.address;
 | 
				
			||||||
@@ -327,10 +327,10 @@ in
 | 
				
			|||||||
                };
 | 
					                };
 | 
				
			||||||
                ipv6Prefixes = [
 | 
					                ipv6Prefixes = [
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    ipv6PrefixConfig.Prefix = prefixes.mail.v6;
 | 
					                    Prefix = prefixes.mail.v6;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
                routes = map (r: { routeConfig = r; }) [
 | 
					                routes = [
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    Destination = prefixes.mail.v4;
 | 
					                    Destination = prefixes.mail.v4;
 | 
				
			||||||
                    Scope = "link";
 | 
					                    Scope = "link";
 | 
				
			||||||
@@ -350,10 +350,10 @@ in
 | 
				
			|||||||
                };
 | 
					                };
 | 
				
			||||||
                ipv6Prefixes = [
 | 
					                ipv6Prefixes = [
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    ipv6PrefixConfig.Prefix = prefixes.darts.v6;
 | 
					                    Prefix = prefixes.darts.v6;
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
                routes = map (r: { routeConfig = r; }) [
 | 
					                routes = [
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    Destination = prefixes.darts.v4;
 | 
					                    Destination = prefixes.darts.v4;
 | 
				
			||||||
                    Scope = "link";
 | 
					                    Scope = "link";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -164,11 +164,9 @@ in
 | 
				
			|||||||
                    };
 | 
					                    };
 | 
				
			||||||
                    wireguardPeers = [
 | 
					                    wireguardPeers = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        wireguardPeerConfig = {
 | 
					 | 
				
			||||||
                        PublicKey = "7N9YdQaCMWWIwAnW37vrthm9ZpbnG4Lx3gheHeRYz2E=";
 | 
					                        PublicKey = "7N9YdQaCMWWIwAnW37vrthm9ZpbnG4Lx3gheHeRYz2E=";
 | 
				
			||||||
                        AllowedIPs = [ allAssignments.kelder.estuary.ipv4.address ];
 | 
					                        AllowedIPs = [ allAssignments.kelder.estuary.ipv4.address ];
 | 
				
			||||||
                        PersistentKeepalive = 25;
 | 
					                        PersistentKeepalive = 25;
 | 
				
			||||||
                        };
 | 
					 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                  };
 | 
					                  };
 | 
				
			||||||
@@ -278,11 +276,10 @@ in
 | 
				
			|||||||
                    };
 | 
					                    };
 | 
				
			||||||
                    ipv6Prefixes = [
 | 
					                    ipv6Prefixes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        ipv6PrefixConfig.Prefix = prefixes.base.v6;
 | 
					                        Prefix = prefixes.base.v6;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                    routes = map (r: { routeConfig = r; }) (flatten
 | 
					                    routes = flatten ([
 | 
				
			||||||
                      ([
 | 
					 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        Destination = prefixes.vip1;
 | 
					                        Destination = prefixes.vip1;
 | 
				
			||||||
                        Gateway = allAssignments.colony.routing.ipv4.address;
 | 
					                        Gateway = allAssignments.colony.routing.ipv4.address;
 | 
				
			||||||
@@ -323,7 +320,7 @@ in
 | 
				
			|||||||
                        Destination = prefixes."${pName}".v6;
 | 
					                        Destination = prefixes."${pName}".v6;
 | 
				
			||||||
                        Gateway = allAssignments.colony.internal.ipv6.address;
 | 
					                        Gateway = allAssignments.colony.internal.ipv6.address;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                      ]) [ "vms" "ctrs" "oci" ])));
 | 
					                    ]) [ "vms" "ctrs" "oci" ]));
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -332,7 +329,7 @@ in
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    matchConfig.Name = "as211024";
 | 
					                    matchConfig.Name = "as211024";
 | 
				
			||||||
                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
					                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
				
			||||||
                    routes = map (r: { routeConfig = r; }) [
 | 
					                    routes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        Destination = lib.my.c.home.prefixes.all.v4;
 | 
					                        Destination = lib.my.c.home.prefixes.all.v4;
 | 
				
			||||||
                        Gateway = lib.my.c.home.vips.as211024.v4;
 | 
					                        Gateway = lib.my.c.home.vips.as211024.v4;
 | 
				
			||||||
@@ -344,10 +341,8 @@ in
 | 
				
			|||||||
                  matchConfig.Name = "kelder";
 | 
					                  matchConfig.Name = "kelder";
 | 
				
			||||||
                  routes = [
 | 
					                  routes = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      routeConfig = {
 | 
					 | 
				
			||||||
                      Destination = allAssignments.kelder.estuary.ipv4.address;
 | 
					                      Destination = allAssignments.kelder.estuary.ipv4.address;
 | 
				
			||||||
                      Scope = "link";
 | 
					                      Scope = "link";
 | 
				
			||||||
                      };
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                  ];
 | 
					                  ];
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@@ -412,6 +407,7 @@ in
 | 
				
			|||||||
                      ip6 daddr ${aa.valheim-oci.internal.ipv6.address} udp dport { 2456-2457 } accept
 | 
					                      ip6 daddr ${aa.valheim-oci.internal.ipv6.address} udp dport { 2456-2457 } accept
 | 
				
			||||||
                      ip6 daddr ${aa.waffletail.internal.ipv6.address} udp dport 41641 accept
 | 
					                      ip6 daddr ${aa.waffletail.internal.ipv6.address} udp dport 41641 accept
 | 
				
			||||||
                      ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} udp dport 25565 accept
 | 
					                      ip6 daddr ${aa.simpcraft-oci.internal.ipv6.address} udp dport 25565 accept
 | 
				
			||||||
 | 
					                      ip6 daddr ${aa.enshrouded-oci.internal.ipv6.address} udp dport { 15636-15637 } accept
 | 
				
			||||||
                      return
 | 
					                      return
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    chain filter-routing {
 | 
					                    chain filter-routing {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,6 +153,7 @@ in
 | 
				
			|||||||
            simpcraft IN AAAA ${allAssignments.simpcraft-oci.internal.ipv6.address}
 | 
					            simpcraft IN AAAA ${allAssignments.simpcraft-oci.internal.ipv6.address}
 | 
				
			||||||
            simpcraft-staging IN A ${assignments.internal.ipv4.address}
 | 
					            simpcraft-staging IN A ${assignments.internal.ipv4.address}
 | 
				
			||||||
            simpcraft-staging IN AAAA ${allAssignments.simpcraft-staging-oci.internal.ipv6.address}
 | 
					            simpcraft-staging IN AAAA ${allAssignments.simpcraft-staging-oci.internal.ipv6.address}
 | 
				
			||||||
 | 
					            enshrouded IN A ${assignments.internal.ipv4.address}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mail-vm IN A ${net.cidr.host 0 prefixes.mail.v4}
 | 
					            mail-vm IN A ${net.cidr.host 0 prefixes.mail.v4}
 | 
				
			||||||
            mail-vm IN AAAA ${net.cidr.host 1 prefixes.mail.v6}
 | 
					            mail-vm IN AAAA ${net.cidr.host 1 prefixes.mail.v6}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,11 @@ in
 | 
				
			|||||||
          ];
 | 
					          ];
 | 
				
			||||||
          url = "https://git.${pubDomain}";
 | 
					          url = "https://git.${pubDomain}";
 | 
				
			||||||
          tokenFile = config.age.secrets."gitea/actions-runner.env".path;
 | 
					          tokenFile = config.age.secrets."gitea/actions-runner.env".path;
 | 
				
			||||||
 | 
					          settings = {
 | 
				
			||||||
 | 
					            runner = {
 | 
				
			||||||
 | 
					              timeout = "8h";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,10 +47,10 @@ in
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
        ipv6Prefixes = [
 | 
					        ipv6Prefixes = [
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            ipv6PrefixConfig.Prefix = prefixes.jam.v6;
 | 
					            Prefix = prefixes.jam.v6;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
        routes = map (r: { routeConfig = r; }) [
 | 
					        routes = [
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            Destination = prefixes.jam.v4;
 | 
					            Destination = prefixes.jam.v4;
 | 
				
			||||||
            Scope = "link";
 | 
					            Scope = "link";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,11 +50,6 @@ in
 | 
				
			|||||||
                  group = "matrix-synapse";
 | 
					                  group = "matrix-synapse";
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                "chatterbox/syncv3.env" = {
 | 
					 | 
				
			||||||
                  owner = "matrix-syncv3";
 | 
					 | 
				
			||||||
                  group = "matrix-syncv3";
 | 
					 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                "chatterbox/mautrix-whatsapp.env" = {
 | 
					                "chatterbox/mautrix-whatsapp.env" = {
 | 
				
			||||||
                  owner = "mautrix-whatsapp";
 | 
					                  owner = "mautrix-whatsapp";
 | 
				
			||||||
                  group = "mautrix-whatsapp";
 | 
					                  group = "mautrix-whatsapp";
 | 
				
			||||||
@@ -80,32 +75,21 @@ in
 | 
				
			|||||||
              matrix-synapse.extraGroups = [
 | 
					              matrix-synapse.extraGroups = [
 | 
				
			||||||
                "mautrix-whatsapp"
 | 
					                "mautrix-whatsapp"
 | 
				
			||||||
              ];
 | 
					              ];
 | 
				
			||||||
              matrix-syncv3 = {
 | 
					 | 
				
			||||||
                isSystemUser = true;
 | 
					 | 
				
			||||||
                uid = uids.matrix-syncv3;
 | 
					 | 
				
			||||||
                group = "matrix-syncv3";
 | 
					 | 
				
			||||||
              };
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
            groups = {
 | 
					 | 
				
			||||||
              matrix-syncv3.gid = gids.matrix-syncv3;
 | 
					 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					            groups = { };
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          systemd = {
 | 
					          systemd = {
 | 
				
			||||||
            network.networks."80-container-host0" = networkdAssignment "host0" assignments.internal;
 | 
					            network.networks."80-container-host0" = networkdAssignment "host0" assignments.internal;
 | 
				
			||||||
            services = {
 | 
					            services = { } // (genAttrs [ "mautrix-whatsapp" "mautrix-meta-messenger" "mautrix-meta-instagram" ] (_: {
 | 
				
			||||||
              matrix-sliding-sync.serviceConfig = {
 | 
					 | 
				
			||||||
                # Needs to be able to read its secrets
 | 
					 | 
				
			||||||
                DynamicUser = mkForce false;
 | 
					 | 
				
			||||||
                User = "matrix-syncv3";
 | 
					 | 
				
			||||||
                Group = "matrix-syncv3";
 | 
					 | 
				
			||||||
              };
 | 
					 | 
				
			||||||
            } // (genAttrs [ "mautrix-whatsapp" "mautrix-meta-messenger" "mautrix-meta-instagram" ] (_: {
 | 
					 | 
				
			||||||
              # ffmpeg needed to convert GIFs to video
 | 
					              # ffmpeg needed to convert GIFs to video
 | 
				
			||||||
              path = with pkgs; [ ffmpeg ];
 | 
					              path = with pkgs; [ ffmpeg ];
 | 
				
			||||||
            }));
 | 
					            }));
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          # TODO/FIXME: https://github.com/NixOS/nixpkgs/issues/336052
 | 
				
			||||||
 | 
					          nixpkgs.config.permittedInsecurePackages = [ "olm-3.2.16" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          services = {
 | 
					          services = {
 | 
				
			||||||
            netdata.enable = true;
 | 
					            netdata.enable = true;
 | 
				
			||||||
            matrix-synapse = {
 | 
					            matrix-synapse = {
 | 
				
			||||||
@@ -193,20 +177,10 @@ in
 | 
				
			|||||||
                app_service_config_files = [
 | 
					                app_service_config_files = [
 | 
				
			||||||
                  "/var/lib/heisenbridge/registration.yml"
 | 
					                  "/var/lib/heisenbridge/registration.yml"
 | 
				
			||||||
                  config.age.secrets."chatterbox/doublepuppet.yaml".path
 | 
					                  config.age.secrets."chatterbox/doublepuppet.yaml".path
 | 
				
			||||||
                  "/var/lib/mautrix-whatsapp/whatsapp-registration.yaml"
 | 
					 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            matrix-sliding-sync = {
 | 
					 | 
				
			||||||
              enable = true;
 | 
					 | 
				
			||||||
              createDatabase = false;
 | 
					 | 
				
			||||||
              environmentFile = config.age.secrets."chatterbox/syncv3.env".path;
 | 
					 | 
				
			||||||
              settings = {
 | 
					 | 
				
			||||||
                SYNCV3_BINDADDR = "[::]:8009";
 | 
					 | 
				
			||||||
                SYNCV3_SERVER = "http://localhost:8008";
 | 
					 | 
				
			||||||
              };
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            heisenbridge = {
 | 
					            heisenbridge = {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
@@ -285,10 +259,12 @@ in
 | 
				
			|||||||
                      avatar = "mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak";
 | 
					                      avatar = "mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak";
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                  };
 | 
					                  };
 | 
				
			||||||
                  meta.mode = "messenger";
 | 
					                  network = {
 | 
				
			||||||
 | 
					                    mode = "messenger";
 | 
				
			||||||
 | 
					                    displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (FBM)'';
 | 
				
			||||||
 | 
					                  };
 | 
				
			||||||
                  bridge = {
 | 
					                  bridge = {
 | 
				
			||||||
                    username_template = "fbm2_{{.}}";
 | 
					                    username_template = "fbm2_{{.}}";
 | 
				
			||||||
                    displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (FBM)'';
 | 
					 | 
				
			||||||
                    personal_filtering_spaces = true;
 | 
					                    personal_filtering_spaces = true;
 | 
				
			||||||
                    delivery_receipts = true;
 | 
					                    delivery_receipts = true;
 | 
				
			||||||
                    management_room_text.welcome = "Hello, I'm a Messenger bridge bot.";
 | 
					                    management_room_text.welcome = "Hello, I'm a Messenger bridge bot.";
 | 
				
			||||||
@@ -331,10 +307,12 @@ in
 | 
				
			|||||||
                      avatar = "mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv";
 | 
					                      avatar = "mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv";
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                  };
 | 
					                  };
 | 
				
			||||||
                  meta.mode = "instagram";
 | 
					                  network = {
 | 
				
			||||||
 | 
					                    mode = "instagram";
 | 
				
			||||||
 | 
					                    displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (IG)'';
 | 
				
			||||||
 | 
					                  };
 | 
				
			||||||
                  bridge = {
 | 
					                  bridge = {
 | 
				
			||||||
                    username_template = "ig_{{.}}";
 | 
					                    username_template = "ig_{{.}}";
 | 
				
			||||||
                    displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (IG)'';
 | 
					 | 
				
			||||||
                    personal_filtering_spaces = true;
 | 
					                    personal_filtering_spaces = true;
 | 
				
			||||||
                    delivery_receipts = true;
 | 
					                    delivery_receipts = true;
 | 
				
			||||||
                    management_room_text.welcome = "Hello, I'm an Instagram bridge bot.";
 | 
					                    management_room_text.welcome = "Hello, I'm an Instagram bridge bot.";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,6 +94,14 @@ in
 | 
				
			|||||||
          };
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nixpkgs.config.permittedInsecurePackages = [
 | 
				
			||||||
 | 
					          # FIXME: This is needed for Sonarr
 | 
				
			||||||
 | 
					          "aspnetcore-runtime-wrapped-6.0.36"
 | 
				
			||||||
 | 
					          "aspnetcore-runtime-6.0.36"
 | 
				
			||||||
 | 
					          "dotnet-sdk-wrapped-6.0.428"
 | 
				
			||||||
 | 
					          "dotnet-sdk-6.0.428"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        services = {
 | 
					        services = {
 | 
				
			||||||
          netdata.enable = true;
 | 
					          netdata.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,14 +71,12 @@ in
 | 
				
			|||||||
              RouteTable = routeTable;
 | 
					              RouteTable = routeTable;
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            wireguardPeers = [
 | 
					            wireguardPeers = [
 | 
				
			||||||
              {
 | 
					 | 
				
			||||||
              # AirVPN NL
 | 
					              # AirVPN NL
 | 
				
			||||||
                wireguardPeerConfig = {
 | 
					              {
 | 
				
			||||||
                Endpoint = "2a00:1678:1337:2329:e5f:35d4:4404:ef9f:1637";
 | 
					                Endpoint = "2a00:1678:1337:2329:e5f:35d4:4404:ef9f:1637";
 | 
				
			||||||
                PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk=";
 | 
					                PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk=";
 | 
				
			||||||
                PresharedKeyFile = config.age.secrets."${pskFile}".path;
 | 
					                PresharedKeyFile = config.age.secrets."${pskFile}".path;
 | 
				
			||||||
                AllowedIPs = [ "0.0.0.0/0" "::/0" ];
 | 
					                AllowedIPs = [ "0.0.0.0/0" "::/0" ];
 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ];
 | 
					            ];
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
@@ -94,7 +92,7 @@ in
 | 
				
			|||||||
              matchConfig.Name = "vpn";
 | 
					              matchConfig.Name = "vpn";
 | 
				
			||||||
              address = [ "10.182.97.37/32" "fd7d:76ee:e68f:a993:735d:ef5e:6907:b122/128" ];
 | 
					              address = [ "10.182.97.37/32" "fd7d:76ee:e68f:a993:735d:ef5e:6907:b122/128" ];
 | 
				
			||||||
              dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ];
 | 
					              dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ];
 | 
				
			||||||
              routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [
 | 
					              routingPolicyRules = [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  Family = "both";
 | 
					                  Family = "both";
 | 
				
			||||||
                  SuppressPrefixLength = 0;
 | 
					                  SuppressPrefixLength = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,6 @@ let
 | 
				
			|||||||
      # For clients
 | 
					      # For clients
 | 
				
			||||||
      (mkWellKnown "matrix/client" (toJSON {
 | 
					      (mkWellKnown "matrix/client" (toJSON {
 | 
				
			||||||
        "m.homeserver".base_url = "https://matrix.nul.ie";
 | 
					        "m.homeserver".base_url = "https://matrix.nul.ie";
 | 
				
			||||||
        "org.matrix.msc3575.proxy".url = "https://matrix-syncv3.nul.ie";
 | 
					 | 
				
			||||||
      }))
 | 
					      }))
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
@@ -182,10 +181,6 @@ in
 | 
				
			|||||||
        ];
 | 
					        ];
 | 
				
			||||||
        useACMEHost = pubDomain;
 | 
					        useACMEHost = pubDomain;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      "matrix-syncv3.${pubDomain}" = {
 | 
					 | 
				
			||||||
        locations."/".proxyPass = "http://chatterbox-ctr.${domain}:8009";
 | 
					 | 
				
			||||||
        useACMEHost = pubDomain;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      "element.${pubDomain}" =
 | 
					      "element.${pubDomain}" =
 | 
				
			||||||
      let
 | 
					      let
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -216,7 +216,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            atticd = {
 | 
					            atticd = {
 | 
				
			||||||
              enable = false;
 | 
					              enable = false;
 | 
				
			||||||
              credentialsFile = config.age.secrets."object/atticd.env".path;
 | 
					              environmentFile = config.age.secrets."object/atticd.env".path;
 | 
				
			||||||
              settings = {
 | 
					              settings = {
 | 
				
			||||||
                listen = "[::]:8069";
 | 
					                listen = "[::]:8069";
 | 
				
			||||||
                allowed-hosts = [ "nix-cache.${pubDomain}" ];
 | 
					                allowed-hosts = [ "nix-cache.${pubDomain}" ];
 | 
				
			||||||
@@ -237,7 +237,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            harmonia = {
 | 
					            harmonia = {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
              signKeyPath = config.age.secrets."nix-cache.key".path;
 | 
					              signKeyPaths = [ config.age.secrets."nix-cache.key".path ];
 | 
				
			||||||
              settings = {
 | 
					              settings = {
 | 
				
			||||||
                priority = 30;
 | 
					                priority = 30;
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,6 +99,8 @@ in
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            borgbackup.jobs.vaultwarden = {
 | 
					            borgbackup.jobs.vaultwarden = {
 | 
				
			||||||
 | 
					              readWritePaths = [ "/var/lib/borgbackup" "/var/cache/borgbackup" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              paths = [ vwData ];
 | 
					              paths = [ vwData ];
 | 
				
			||||||
              repo = "zh2855@zh2855.rsync.net:borg/vaultwarden2";
 | 
					              repo = "zh2855@zh2855.rsync.net:borg/vaultwarden2";
 | 
				
			||||||
              doInit = true;
 | 
					              doInit = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,7 +86,7 @@ in
 | 
				
			|||||||
            interfaceName = "tailscale0";
 | 
					            interfaceName = "tailscale0";
 | 
				
			||||||
            extraUpFlags = [
 | 
					            extraUpFlags = [
 | 
				
			||||||
              "--operator=${config.my.user.config.name}"
 | 
					              "--operator=${config.my.user.config.name}"
 | 
				
			||||||
              "--login-server=https://ts.nul.ie"
 | 
					              "--login-server=https://hs.nul.ie"
 | 
				
			||||||
              "--netfilter-mode=off"
 | 
					              "--netfilter-mode=off"
 | 
				
			||||||
              "--advertise-exit-node"
 | 
					              "--advertise-exit-node"
 | 
				
			||||||
              "--advertise-routes=${advRoutes}"
 | 
					              "--advertise-routes=${advRoutes}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,10 +140,10 @@ in
 | 
				
			|||||||
                    };
 | 
					                    };
 | 
				
			||||||
                    ipv6Prefixes = [
 | 
					                    ipv6Prefixes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        ipv6PrefixConfig.Prefix = prefixes.ctrs.v6;
 | 
					                        Prefix = prefixes.ctrs.v6;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                    routes = map (r: { routeConfig = r; }) [
 | 
					                    routes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        Destination = lib.my.c.tailscale.prefix.v4;
 | 
					                        Destination = lib.my.c.tailscale.prefix.v4;
 | 
				
			||||||
                        Gateway = allAssignments.waffletail.internal.ipv4.address;
 | 
					                        Gateway = allAssignments.waffletail.internal.ipv4.address;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,7 @@ in
 | 
				
			|||||||
      valheim-oci = 2;
 | 
					      valheim-oci = 2;
 | 
				
			||||||
      simpcraft-oci = 3;
 | 
					      simpcraft-oci = 3;
 | 
				
			||||||
      simpcraft-staging-oci = 4;
 | 
					      simpcraft-staging-oci = 4;
 | 
				
			||||||
 | 
					      enshrouded-oci = 5;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }:
 | 
					    configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }:
 | 
				
			||||||
@@ -66,6 +67,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          ./valheim.nix
 | 
					          ./valheim.nix
 | 
				
			||||||
          ./minecraft
 | 
					          ./minecraft
 | 
				
			||||||
 | 
					          # ./enshrouded.nix
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = mkMerge [
 | 
					        config = mkMerge [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								nixos/boxes/colony/vms/whale2/enshrouded.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								nixos/boxes/colony/vms/whale2/enshrouded.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{ lib, config, allAssignments, ... }:
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  inherit (lib) concatStringsSep;
 | 
				
			||||||
 | 
					  inherit (lib.my) dockerNetAssignment;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  config = {
 | 
				
			||||||
 | 
					    virtualisation.oci-containers.containers = {
 | 
				
			||||||
 | 
					      enshrouded = {
 | 
				
			||||||
 | 
					        image = "sknnr/enshrouded-dedicated-server@sha256:f163e8ba9caa2115d8a0a7b16c3696968242fb6fba82706d9a77a882df083497";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        environment = {
 | 
				
			||||||
 | 
					          SERVER_NAME = "UWUshrouded";
 | 
				
			||||||
 | 
					          # SERVER_IP = "::"; # no IPv6?? :(
 | 
				
			||||||
 | 
					          TZ = "Europe/Dublin";
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        environmentFiles = [ config.age.secrets."whale2/enshrouded.env".path ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        volumes = [
 | 
				
			||||||
 | 
					          "enshrouded:/home/steam/enshrouded/savegame"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        extraOptions = [
 | 
				
			||||||
 | 
					          ''--network=colony:${dockerNetAssignment allAssignments "enshrouded-oci"}''
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my = {
 | 
				
			||||||
 | 
					      secrets.files = {
 | 
				
			||||||
 | 
					        "whale2/enshrouded.env" = {};
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -123,6 +123,7 @@ in
 | 
				
			|||||||
          within = "12H";
 | 
					          within = "12H";
 | 
				
			||||||
          hourly = 48;
 | 
					          hourly = 48;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					        readWritePaths = [ "/var/lib/borgbackup" "/var/cache/borgbackup" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Avoid Minecraft poking the files while we back up
 | 
					        # Avoid Minecraft poking the files while we back up
 | 
				
			||||||
        preHook = rconCommand "save-off";
 | 
					        preHook = rconCommand "save-off";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ in
 | 
				
			|||||||
          cpu = {
 | 
					          cpu = {
 | 
				
			||||||
            amd.updateMicrocode = true;
 | 
					            amd.updateMicrocode = true;
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
          opengl.extraPackages = with pkgs; [
 | 
					          graphics.extraPackages = with pkgs; [
 | 
				
			||||||
            intel-media-driver
 | 
					            intel-media-driver
 | 
				
			||||||
          ];
 | 
					          ];
 | 
				
			||||||
          bluetooth.enable = true;
 | 
					          bluetooth.enable = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,7 @@ in
 | 
				
			|||||||
            enable = true;
 | 
					            enable = true;
 | 
				
			||||||
            openFirewall = true;
 | 
					            openFirewall = true;
 | 
				
			||||||
            unifiPackage = pkgs.unifi8;
 | 
					            unifiPackage = pkgs.unifi8;
 | 
				
			||||||
 | 
					            mongodbPackage = pkgs.mongodb-6_0;
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
index: { lib, allAssignments, ... }:
 | 
					index: { lib, allAssignments, ... }:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  inherit (builtins) elemAt;
 | 
					  inherit (builtins) elemAt;
 | 
				
			||||||
  inherit (lib) concatStringsSep;
 | 
					 | 
				
			||||||
  inherit (lib.my) net mkVLAN;
 | 
					  inherit (lib.my) net mkVLAN;
 | 
				
			||||||
  inherit (lib.my.c) pubDomain;
 | 
					  inherit (lib.my.c) pubDomain;
 | 
				
			||||||
  inherit (lib.my.c.home) domain vlans prefixes vips routers routersPubV4;
 | 
					  inherit (lib.my.c.home) domain vlans prefixes vips routers routersPubV4;
 | 
				
			||||||
@@ -151,28 +150,6 @@ in
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            nginx.enable = true;
 | 
					            nginx.enable = true;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            tailscale =
 | 
					 | 
				
			||||||
            let
 | 
					 | 
				
			||||||
              advRoutes = concatStringsSep "," [
 | 
					 | 
				
			||||||
                prefixes.all.v4
 | 
					 | 
				
			||||||
                prefixes.all.v6
 | 
					 | 
				
			||||||
              ];
 | 
					 | 
				
			||||||
            in
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
              enable = true;
 | 
					 | 
				
			||||||
              authKeyFile = config.age.secrets."tailscale-auth.key".path;
 | 
					 | 
				
			||||||
              openFirewall = true;
 | 
					 | 
				
			||||||
              interfaceName = "tailscale0";
 | 
					 | 
				
			||||||
              extraUpFlags = [
 | 
					 | 
				
			||||||
                "--operator=${config.my.user.config.name}"
 | 
					 | 
				
			||||||
                "--login-server=https://ts.nul.ie"
 | 
					 | 
				
			||||||
                "--netfilter-mode=off"
 | 
					 | 
				
			||||||
                "--advertise-exit-node"
 | 
					 | 
				
			||||||
                "--advertise-routes=${advRoutes}"
 | 
					 | 
				
			||||||
                "--accept-routes=false"
 | 
					 | 
				
			||||||
              ];
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          networking = { inherit domain; };
 | 
					          networking = { inherit domain; };
 | 
				
			||||||
@@ -250,7 +227,7 @@ in
 | 
				
			|||||||
                  networkConfig = networkd.noL3;
 | 
					                  networkConfig = networkd.noL3;
 | 
				
			||||||
                  extraConfig = ''
 | 
					                  extraConfig = ''
 | 
				
			||||||
                    [CAKE]
 | 
					                    [CAKE]
 | 
				
			||||||
                    Bandwidth=235M
 | 
					                    Bandwidth=490M
 | 
				
			||||||
                    RTTSec=50ms
 | 
					                    RTTSec=50ms
 | 
				
			||||||
                    PriorityQueueingPreset=besteffort
 | 
					                    PriorityQueueingPreset=besteffort
 | 
				
			||||||
                    # DOCSIS preset
 | 
					                    # DOCSIS preset
 | 
				
			||||||
@@ -274,7 +251,7 @@ in
 | 
				
			|||||||
                    extraConfig = ''
 | 
					                    extraConfig = ''
 | 
				
			||||||
                      [CAKE]
 | 
					                      [CAKE]
 | 
				
			||||||
                      Parent=root
 | 
					                      Parent=root
 | 
				
			||||||
                      Bandwidth=24M
 | 
					                      Bandwidth=48M
 | 
				
			||||||
                      RTTSec=50ms
 | 
					                      RTTSec=50ms
 | 
				
			||||||
                    '';
 | 
					                    '';
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
@@ -299,11 +276,20 @@ in
 | 
				
			|||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    matchConfig.Name = "as211024";
 | 
					                    matchConfig.Name = "as211024";
 | 
				
			||||||
                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
					                    networkConfig.IPv6AcceptRA = mkForce false;
 | 
				
			||||||
                    routes = map (r: { routeConfig = r; }) [
 | 
					                    routes = [
 | 
				
			||||||
                      {
 | 
					                      {
 | 
				
			||||||
                        Destination = lib.my.c.colony.prefixes.all.v4;
 | 
					                        Destination = lib.my.c.colony.prefixes.all.v4;
 | 
				
			||||||
                        Gateway = allAssignments.estuary.as211024.ipv4.address;
 | 
					                        Gateway = allAssignments.estuary.as211024.ipv4.address;
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      {
 | 
				
			||||||
 | 
					                        Destination = lib.my.c.tailscale.prefix.v4;
 | 
				
			||||||
 | 
					                        Gateway = allAssignments.britway.as211024.ipv4.address;
 | 
				
			||||||
 | 
					                      }
 | 
				
			||||||
 | 
					                      {
 | 
				
			||||||
 | 
					                        Destination = lib.my.c.tailscale.prefix.v6;
 | 
				
			||||||
 | 
					                        Gateway = allAssignments.britway.as211024.ipv6.address;
 | 
				
			||||||
 | 
					                      }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
@@ -315,7 +301,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "60-lan-hi" = {
 | 
					                "60-lan-hi" = {
 | 
				
			||||||
                  routes = map (r: { routeConfig = r; }) [
 | 
					                  routes = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      Destination = elemAt routersPubV4 otherIndex;
 | 
					                      Destination = elemAt routersPubV4 otherIndex;
 | 
				
			||||||
                      Gateway = net.cidr.host (otherIndex + 1) prefixes.hi.v4;
 | 
					                      Gateway = net.cidr.host (otherIndex + 1) prefixes.hi.v4;
 | 
				
			||||||
@@ -330,7 +316,6 @@ in
 | 
				
			|||||||
            secrets = {
 | 
					            secrets = {
 | 
				
			||||||
              files = {
 | 
					              files = {
 | 
				
			||||||
                "l2mesh/as211024.key" = {};
 | 
					                "l2mesh/as211024.key" = {};
 | 
				
			||||||
                "tailscale-auth.key" = {};
 | 
					 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -340,7 +325,7 @@ in
 | 
				
			|||||||
              };
 | 
					              };
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            firewall = {
 | 
					            firewall = {
 | 
				
			||||||
              trustedInterfaces = [ "lan-hi" "lan-lo" "tailscale0" ];
 | 
					              trustedInterfaces = [ "lan-hi" "lan-lo" ];
 | 
				
			||||||
              udp.allowed = [ 5353 ];
 | 
					              udp.allowed = [ 5353 ];
 | 
				
			||||||
              tcp.allowed = [ 5353 ];
 | 
					              tcp.allowed = [ 5353 ];
 | 
				
			||||||
              nat = {
 | 
					              nat = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,12 +61,7 @@ in
 | 
				
			|||||||
        v6Alive = pingScriptFor "v6" [ "2606:4700:4700::1111" "2001:4860:4860::8888" "2600::" ];
 | 
					        v6Alive = pingScriptFor "v6" [ "2606:4700:4700::1111" "2001:4860:4860::8888" "2600::" ];
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      vrrpInstances = {
 | 
					      vrrpInstances = {
 | 
				
			||||||
        v4 = mkVRRP "v4" 51 // {
 | 
					        v4 = mkVRRP "v4" 51;
 | 
				
			||||||
          extraConfig = ''
 | 
					 | 
				
			||||||
            notify_master "${config.systemd.package}/bin/systemctl start tailscaled.service" root
 | 
					 | 
				
			||||||
            notify_backup "${config.systemd.package}/bin/systemctl stop tailscaled.service" root
 | 
					 | 
				
			||||||
          '';
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        v6 = (mkVRRP "v6" 52) // {
 | 
					        v6 = (mkVRRP "v6" 52) // {
 | 
				
			||||||
          extraConfig = ''
 | 
					          extraConfig = ''
 | 
				
			||||||
            notify_master "${config.systemd.package}/bin/systemctl start radvd.service" root
 | 
					            notify_master "${config.systemd.package}/bin/systemctl start radvd.service" root
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      config = {
 | 
					      config = {
 | 
				
			||||||
        # Hardware acceleration for Jellyfin
 | 
					        # Hardware acceleration for Jellyfin
 | 
				
			||||||
        hardware.opengl = {
 | 
					        hardware.graphics = {
 | 
				
			||||||
          enable = true;
 | 
					          enable = true;
 | 
				
			||||||
          extraPackages = with pkgs; [
 | 
					          extraPackages = with pkgs; [
 | 
				
			||||||
            vaapiIntel
 | 
					            vaapiIntel
 | 
				
			||||||
@@ -78,6 +78,14 @@ in
 | 
				
			|||||||
          };
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nixpkgs.config.permittedInsecurePackages = [
 | 
				
			||||||
 | 
					          # FIXME: This is needed for Sonarr
 | 
				
			||||||
 | 
					          "aspnetcore-runtime-wrapped-6.0.36"
 | 
				
			||||||
 | 
					          "aspnetcore-runtime-6.0.36"
 | 
				
			||||||
 | 
					          "dotnet-sdk-wrapped-6.0.428"
 | 
				
			||||||
 | 
					          "dotnet-sdk-6.0.428"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        services = {
 | 
					        services = {
 | 
				
			||||||
          transmission = {
 | 
					          transmission = {
 | 
				
			||||||
            enable = true;
 | 
					            enable = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,14 +73,12 @@ in
 | 
				
			|||||||
              RouteTable = routeTable;
 | 
					              RouteTable = routeTable;
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            wireguardPeers = [
 | 
					            wireguardPeers = [
 | 
				
			||||||
              {
 | 
					 | 
				
			||||||
              # AirVPN IE
 | 
					              # AirVPN IE
 | 
				
			||||||
                wireguardPeerConfig = {
 | 
					              {
 | 
				
			||||||
                Endpoint = "146.70.94.2:1637";
 | 
					                Endpoint = "146.70.94.2:1637";
 | 
				
			||||||
                PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk=";
 | 
					                PublicKey = "PyLCXAQT8KkM4T+dUsOQfn+Ub3pGxfGlxkIApuig+hk=";
 | 
				
			||||||
                PresharedKeyFile = config.age.secrets."${pskFile}".path;
 | 
					                PresharedKeyFile = config.age.secrets."${pskFile}".path;
 | 
				
			||||||
                AllowedIPs = [ "0.0.0.0/0" "::/0" ];
 | 
					                AllowedIPs = [ "0.0.0.0/0" "::/0" ];
 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ];
 | 
					            ];
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
@@ -97,7 +95,7 @@ in
 | 
				
			|||||||
              matchConfig.Name = "vpn";
 | 
					              matchConfig.Name = "vpn";
 | 
				
			||||||
              address = [ "10.161.170.28/32" "fd7d:76ee:e68f:a993:b12d:6d15:c80a:9516/128" ];
 | 
					              address = [ "10.161.170.28/32" "fd7d:76ee:e68f:a993:b12d:6d15:c80a:9516/128" ];
 | 
				
			||||||
              dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ];
 | 
					              dns = [ "10.128.0.1" "fd7d:76ee:e68f:a993::1" ];
 | 
				
			||||||
              routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [
 | 
					              routingPolicyRules = [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  Family = "both";
 | 
					                  Family = "both";
 | 
				
			||||||
                  SuppressPrefixLength = 0;
 | 
					                  SuppressPrefixLength = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,8 +121,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            samba = {
 | 
					            samba = {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
              enableNmbd = true;
 | 
					              settings = {
 | 
				
			||||||
              shares = {
 | 
					 | 
				
			||||||
                storage = {
 | 
					                storage = {
 | 
				
			||||||
                  path = "/mnt/storage";
 | 
					                  path = "/mnt/storage";
 | 
				
			||||||
                  browseable = "yes";
 | 
					                  browseable = "yes";
 | 
				
			||||||
@@ -131,6 +130,8 @@ in
 | 
				
			|||||||
                  "directory mask" = "0775";
 | 
					                  "directory mask" = "0775";
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              nmbd.enable = true;
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            samba-wsdd.enable = true;
 | 
					            samba-wsdd.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -180,12 +181,10 @@ in
 | 
				
			|||||||
                  };
 | 
					                  };
 | 
				
			||||||
                  wireguardPeers = [
 | 
					                  wireguardPeers = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      wireguardPeerConfig = {
 | 
					 | 
				
			||||||
                      PublicKey = "bP1XUNxp9i8NLOXhgPaIaRzRwi5APbam44/xjvYcyjU=";
 | 
					                      PublicKey = "bP1XUNxp9i8NLOXhgPaIaRzRwi5APbam44/xjvYcyjU=";
 | 
				
			||||||
                      Endpoint = "${allAssignments.estuary.internal.ipv4.address}:${toString lib.my.c.kelder.vpn.port}";
 | 
					                      Endpoint = "${allAssignments.estuary.internal.ipv4.address}:${toString lib.my.c.kelder.vpn.port}";
 | 
				
			||||||
                      AllowedIPs = [ "0.0.0.0/0" ];
 | 
					                      AllowedIPs = [ "0.0.0.0/0" ];
 | 
				
			||||||
                      PersistentKeepalive = 25;
 | 
					                      PersistentKeepalive = 25;
 | 
				
			||||||
                      };
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                  ];
 | 
					                  ];
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@@ -213,7 +212,7 @@ in
 | 
				
			|||||||
                  address = with assignments.estuary; [
 | 
					                  address = with assignments.estuary; [
 | 
				
			||||||
                    (with ipv4; "${address}/${toString mask}")
 | 
					                    (with ipv4; "${address}/${toString mask}")
 | 
				
			||||||
                  ];
 | 
					                  ];
 | 
				
			||||||
                  routingPolicyRules = map (r: { routingPolicyRuleConfig = r; }) [
 | 
					                  routingPolicyRules = [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                      Family = "both";
 | 
					                      Family = "both";
 | 
				
			||||||
                      SuppressPrefixLength = 0;
 | 
					                      SuppressPrefixLength = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
          cpu = {
 | 
					          cpu = {
 | 
				
			||||||
            intel.updateMicrocode = true;
 | 
					            intel.updateMicrocode = true;
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
          opengl.extraPackages = with pkgs; [
 | 
					          graphics.extraPackages = with pkgs; [
 | 
				
			||||||
            intel-media-driver
 | 
					            intel-media-driver
 | 
				
			||||||
          ];
 | 
					          ];
 | 
				
			||||||
          bluetooth.enable = true;
 | 
					          bluetooth.enable = true;
 | 
				
			||||||
@@ -177,7 +177,7 @@
 | 
				
			|||||||
              programs = {
 | 
					              programs = {
 | 
				
			||||||
                fish = {
 | 
					                fish = {
 | 
				
			||||||
                  shellAbbrs = {
 | 
					                  shellAbbrs = {
 | 
				
			||||||
                    tsup = "doas tailscale up --login-server=https://ts.nul.ie --accept-routes";
 | 
					                    tsup = "doas tailscale up --login-server=https://hs.nul.ie --accept-routes";
 | 
				
			||||||
                  };
 | 
					                  };
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,8 +61,8 @@
 | 
				
			|||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          networking = {
 | 
					          networking = {
 | 
				
			||||||
            # Will be set dynamically
 | 
					            # Will be set dynamically, but need something to satisfy `/etc/os-release` stuff
 | 
				
			||||||
            hostName = "";
 | 
					            hostName = "installer";
 | 
				
			||||||
            useNetworkd = false;
 | 
					            useNetworkd = false;
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,6 @@ in
 | 
				
			|||||||
    inputs.impermanence.nixosModule
 | 
					    inputs.impermanence.nixosModule
 | 
				
			||||||
    inputs.ragenix.nixosModules.age
 | 
					    inputs.ragenix.nixosModules.age
 | 
				
			||||||
    inputs.sharry.nixosModules.default
 | 
					    inputs.sharry.nixosModules.default
 | 
				
			||||||
    inputs.attic.nixosModules.atticd
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config = mkMerge [
 | 
					  config = mkMerge [
 | 
				
			||||||
@@ -41,6 +40,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      nix = {
 | 
					      nix = {
 | 
				
			||||||
        package = pkgs'.mine.nix;
 | 
					        package = pkgs'.mine.nix;
 | 
				
			||||||
 | 
					        channel.enable = false;
 | 
				
			||||||
        settings = with lib.my.c.nix; {
 | 
					        settings = with lib.my.c.nix; {
 | 
				
			||||||
          trusted-users = [ "@wheel" ];
 | 
					          trusted-users = [ "@wheel" ];
 | 
				
			||||||
          experimental-features = [ "nix-command" "flakes" "ca-derivations" ];
 | 
					          experimental-features = [ "nix-command" "flakes" "ca-derivations" ];
 | 
				
			||||||
@@ -145,7 +145,10 @@ in
 | 
				
			|||||||
        fish.enable = mkDefault true;
 | 
					        fish.enable = mkDefault true;
 | 
				
			||||||
        # TODO: This is expecting to look up the channel for the database...
 | 
					        # TODO: This is expecting to look up the channel for the database...
 | 
				
			||||||
        command-not-found.enable = mkDefault false;
 | 
					        command-not-found.enable = mkDefault false;
 | 
				
			||||||
        vim.defaultEditor = true;
 | 
					        vim = {
 | 
				
			||||||
 | 
					          enable = true;
 | 
				
			||||||
 | 
					          defaultEditor = true;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      services = {
 | 
					      services = {
 | 
				
			||||||
@@ -240,9 +243,7 @@ in
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    (mkIf config.services.kmscon.enable {
 | 
					    (mkIf config.services.kmscon.enable {
 | 
				
			||||||
      fonts.fonts = with pkgs; [
 | 
					      fonts.fonts = with pkgs; [
 | 
				
			||||||
        (nerdfonts.override {
 | 
					        nerd-fonts.sauce-code-pro
 | 
				
			||||||
          fonts = [ "SourceCodePro" ];
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  config = mkIf cfg.enable {
 | 
					  config = mkIf cfg.enable {
 | 
				
			||||||
    hardware = {
 | 
					    hardware = {
 | 
				
			||||||
      opengl.enable = mkDefault true;
 | 
					      graphics.enable = mkDefault true;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    systemd = {
 | 
					    systemd = {
 | 
				
			||||||
@@ -53,6 +53,8 @@ in
 | 
				
			|||||||
          SUBSYSTEM=="usb", ATTR{idVendor}=="057e", MODE="0664", GROUP="wheel"
 | 
					          SUBSYSTEM=="usb", ATTR{idVendor}=="057e", MODE="0664", GROUP="wheel"
 | 
				
			||||||
          # FT
 | 
					          # FT
 | 
				
			||||||
          SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0664", GROUP="wheel"
 | 
					          SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0664", GROUP="wheel"
 | 
				
			||||||
 | 
					          # /dev/player0
 | 
				
			||||||
 | 
					          SUBSYSTEM=="usb", ATTR{idVendor}=="6969", MODE="0664", GROUP="wheel"
 | 
				
			||||||
        '';
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,10 +44,8 @@ let
 | 
				
			|||||||
      toString (mesh.baseMTU - overhead);
 | 
					      toString (mesh.baseMTU - overhead);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      bridgeFDBs = mapAttrsToList (n: peer: {
 | 
					      bridgeFDBs = mapAttrsToList (n: peer: {
 | 
				
			||||||
        bridgeFDBConfig = {
 | 
					 | 
				
			||||||
        MACAddress = "00:00:00:00:00:00";
 | 
					        MACAddress = "00:00:00:00:00:00";
 | 
				
			||||||
        Destination = peer.addr;
 | 
					        Destination = peer.addr;
 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      }) otherPeers;
 | 
					      }) otherPeers;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,10 +5,19 @@ let
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  cfg = config.my.netboot;
 | 
					  cfg = config.my.netboot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ipxe = pkgs.ipxe.overrideAttrs (o: rec {
 | 
				
			||||||
 | 
					    version = "1.21.1-unstable-2024-06-27";
 | 
				
			||||||
 | 
					    src = pkgs.fetchFromGitHub {
 | 
				
			||||||
 | 
					      owner = "ipxe";
 | 
				
			||||||
 | 
					      repo = "ipxe";
 | 
				
			||||||
 | 
					      rev = "b66e27d9b29a172a097c737ab4d378d60fe01b05";
 | 
				
			||||||
 | 
					      hash = "sha256-TKZ4WjNV2oZIYNefch7E7m1JpeoC/d7O1kofoNv8G40=";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
  tftpRoot = pkgs.linkFarm "tftp-root" [
 | 
					  tftpRoot = pkgs.linkFarm "tftp-root" [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "ipxe-x86_64.efi";
 | 
					      name = "ipxe-x86_64.efi";
 | 
				
			||||||
      path = "${pkgs.ipxe}/ipxe.efi";
 | 
					      path = "${ipxe}/ipxe.efi";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  menuFile = pkgs.runCommand "menu.ipxe" {
 | 
					  menuFile = pkgs.runCommand "menu.ipxe" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,15 @@ let
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  cfg = config.my.nvme;
 | 
					  cfg = config.my.nvme;
 | 
				
			||||||
  nvme-cli = pkgs.nvme-cli.override {
 | 
					  nvme-cli = pkgs.nvme-cli.override {
 | 
				
			||||||
    libnvme = pkgs.libnvme.overrideAttrs (o: {
 | 
					    libnvme = pkgs.libnvme.overrideAttrs (o: rec {
 | 
				
			||||||
 | 
					      # TODO: Remove when 1.11.1 releases (see https://github.com/linux-nvme/libnvme/pull/914)
 | 
				
			||||||
 | 
					      version = "1.11.1";
 | 
				
			||||||
 | 
					      src = pkgs.fetchFromGitHub {
 | 
				
			||||||
 | 
					        owner = "linux-nvme";
 | 
				
			||||||
 | 
					        repo = "libnvme";
 | 
				
			||||||
 | 
					        rev = "v${version}";
 | 
				
			||||||
 | 
					        hash = "sha256-CEGr7PDOVRi210XvICH8iLYDKn8S9bGruBO4tycvsT8=";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
      patches = (if (o ? patches) then o.patches else [ ]) ++ [ ./libnvme-hostconf.patch ];
 | 
					      patches = (if (o ? patches) then o.patches else [ ]) ++ [ ./libnvme-hostconf.patch ];
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,6 +147,15 @@ in
 | 
				
			|||||||
            "/var/lib/systemd"
 | 
					            "/var/lib/systemd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            { directory = "/root/.cache/nix"; mode = "0700"; }
 | 
					            { directory = "/root/.cache/nix"; mode = "0700"; }
 | 
				
			||||||
 | 
					            # Including these unconditionally due to infinite recursion problems...
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              directory = "/etc/lvm/archive";
 | 
				
			||||||
 | 
					              mode = "0700";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              directory = "/etc/lvm/backup";
 | 
				
			||||||
 | 
					              mode = "0700";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          ];
 | 
					          ];
 | 
				
			||||||
          files = [
 | 
					          files = [
 | 
				
			||||||
            "/etc/machine-id"
 | 
					            "/etc/machine-id"
 | 
				
			||||||
@@ -260,18 +269,6 @@ in
 | 
				
			|||||||
        my.tmproot.persistence.config.files =
 | 
					        my.tmproot.persistence.config.files =
 | 
				
			||||||
          concatMap (k: [ k.path "${k.path}.pub" ]) config.services.openssh.hostKeys;
 | 
					          concatMap (k: [ k.path "${k.path}.pub" ]) config.services.openssh.hostKeys;
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      (mkIf config.services.lvm.enable {
 | 
					 | 
				
			||||||
        my.tmproot.persistence.config.directories = [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            directory = "/etc/lvm/archive";
 | 
					 | 
				
			||||||
            mode = "0700";
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            directory = "/etc/lvm/backup";
 | 
					 | 
				
			||||||
            mode = "0700";
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      (mkIf (config.security.acme.certs != { }) {
 | 
					      (mkIf (config.security.acme.certs != { }) {
 | 
				
			||||||
        my.tmproot.persistence.config.directories = [
 | 
					        my.tmproot.persistence.config.directories = [
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
@@ -540,6 +537,20 @@ in
 | 
				
			|||||||
        ];
 | 
					        ];
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      (persistSimpleSvc "octoprint")
 | 
					      (persistSimpleSvc "octoprint")
 | 
				
			||||||
 | 
					      (mkIf (config.services.borgbackup.jobs != { }) {
 | 
				
			||||||
 | 
					        my.tmproot.persistence.config.directories = [
 | 
				
			||||||
 | 
					          "/var/lib/borgbackup"
 | 
				
			||||||
 | 
					          "/var/cache/borgbackup"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        services.borgbackup.package = pkgs.borgbackup.overrideAttrs (o: {
 | 
				
			||||||
 | 
					          makeWrapperArgs = o.makeWrapperArgs ++ [
 | 
				
			||||||
 | 
					            "--set-default BORG_BASE_DIR /var/lib/borgbackup"
 | 
				
			||||||
 | 
					            "--set-default BORG_CONFIG_DIR /var/lib/borgbackup/config"
 | 
				
			||||||
 | 
					            "--set-default BORG_CACHE_DIR /var/cache/borgbackup"
 | 
				
			||||||
 | 
					          ];
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
    ]))
 | 
					    ]))
 | 
				
			||||||
  ]);
 | 
					  ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ in
 | 
				
			|||||||
  vfio-pci-bind = callPackage ./vfio-pci-bind.nix { };
 | 
					  vfio-pci-bind = callPackage ./vfio-pci-bind.nix { };
 | 
				
			||||||
  librespeed-go = callPackage ./librespeed-go.nix { };
 | 
					  librespeed-go = callPackage ./librespeed-go.nix { };
 | 
				
			||||||
  # modrinth-app = callPackage ./modrinth-app { };
 | 
					  # modrinth-app = callPackage ./modrinth-app { };
 | 
				
			||||||
  glfw-minecraft = callPackage ./glfw-minecraft { };
 | 
					 | 
				
			||||||
  chocolate-doom2xx = callPackage ./chocolate-doom2xx { };
 | 
					  chocolate-doom2xx = callPackage ./chocolate-doom2xx { };
 | 
				
			||||||
  windowtolayer = callPackage ./windowtolayer.nix { };
 | 
					  windowtolayer = callPackage ./windowtolayer.nix { };
 | 
				
			||||||
  swaylock-plugin = callPackage ./swaylock-plugin.nix { };
 | 
					  swaylock-plugin = callPackage ./swaylock-plugin.nix { };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
{ lib, glfw-wayland-minecraft, ... }:
 | 
					 | 
				
			||||||
glfw-wayland-minecraft.overrideAttrs (o: {
 | 
					 | 
				
			||||||
  patches = [
 | 
					 | 
				
			||||||
    ./suppress-wayland-errors.patch
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
diff --git a/src/wl_window.c b/src/wl_window.c
 | 
					 | 
				
			||||||
index 7c509896..db9a6451 100644
 | 
					 | 
				
			||||||
--- a/src/wl_window.c
 | 
					 | 
				
			||||||
+++ b/src/wl_window.c
 | 
					 | 
				
			||||||
@@ -2115,25 +2115,21 @@ void _glfwSetWindowTitleWayland(_GLFWwindow* window, const char* title)
 | 
					 | 
				
			||||||
 void _glfwSetWindowIconWayland(_GLFWwindow* window,
 | 
					 | 
				
			||||||
                                int count, const GLFWimage* images)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
-    _glfwInputError(GLFW_FEATURE_UNAVAILABLE,
 | 
					 | 
				
			||||||
-                    "Wayland: The platform does not support setting the window icon");
 | 
					 | 
				
			||||||
+    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the window icon\n");
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void _glfwGetWindowPosWayland(_GLFWwindow* window, int* xpos, int* ypos)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
     // A Wayland client is not aware of its position, so just warn and leave it
 | 
					 | 
				
			||||||
     // as (0, 0)
 | 
					 | 
				
			||||||
-
 | 
					 | 
				
			||||||
-    _glfwInputError(GLFW_FEATURE_UNAVAILABLE,
 | 
					 | 
				
			||||||
-                    "Wayland: The platform does not provide the window position");
 | 
					 | 
				
			||||||
+    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not provide the window position\n");
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void _glfwSetWindowPosWayland(_GLFWwindow* window, int xpos, int ypos)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
     // A Wayland client can not set its position, so just warn
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-    _glfwInputError(GLFW_FEATURE_UNAVAILABLE,
 | 
					 | 
				
			||||||
-                    "Wayland: The platform does not support setting the window position");
 | 
					 | 
				
			||||||
+    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the window position\n");
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void _glfwGetWindowSizeWayland(_GLFWwindow* window, int* width, int* height)
 | 
					 | 
				
			||||||
@@ -2359,8 +2355,7 @@ void _glfwRequestWindowAttentionWayland(_GLFWwindow* window)
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void _glfwFocusWindowWayland(_GLFWwindow* window)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
-    _glfwInputError(GLFW_FEATURE_UNAVAILABLE,
 | 
					 | 
				
			||||||
-                    "Wayland: The platform does not support setting the input focus");
 | 
					 | 
				
			||||||
+    fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the input focus\n");
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void _glfwSetWindowMonitorWayland(_GLFWwindow* window,
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
-----BEGIN AGE ENCRYPTED FILE-----
 | 
					 | 
				
			||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpCM2U2USBQMEJB
 | 
					 | 
				
			||||||
VVhIL2ViVUx1Ym9IbFV1UW52NjZYMmJlYmpjY0RuMzhiclJVS0ZnCkY5dEZHTHlC
 | 
					 | 
				
			||||||
K29uamorWWNJSVV0VlVJNG1VNm9GQ3VPdldJRDNSODVoOVUKLT4gWDI1NTE5IEM0
 | 
					 | 
				
			||||||
UVQvLzFYRTRRMldWSnNnd3V3aXJTeS8vZ1hkdENYVHk1QVVaQVEyQnMKVmN4OUFH
 | 
					 | 
				
			||||||
WCtVSW9tREV5RExycnFJejk5UW91dzd5Rm8vcFBTT0ZCdytFWQotPiBCPC0lLTJW
 | 
					 | 
				
			||||||
LS1ncmVhc2UgRSBjOlg5a0pdQSBSb2YKN0pkalY4VlFDMm8vZzJpQUV4TmdSRHA2
 | 
					 | 
				
			||||||
dnB4UzJaWTRXeDdmKzFrUGVMSEFlbFhlNFFycFRQU005d1I2Si9VUQpHbDVxcGxn
 | 
					 | 
				
			||||||
SVdjZzduSGluYlZnY3lmZmtnOWJYKzkydDhKU0VCNmNvV0EKLS0tIGdaUkpGNy9P
 | 
					 | 
				
			||||||
Y3BGVGVJenJkTG51c3Z3WFU0eTFXT09pSVFseGRLMmxJVU0KhH9EjbL0zv821Yox
 | 
					 | 
				
			||||||
FXc54SXGEkq97qPi3xIoPydWd3FbIuftAhe0xPFGfUOO5/zDni4h+PoNJs2hnkOK
 | 
					 | 
				
			||||||
kHhxtaOj1S6RulI/eYLK/fJjl2aRrTaRFN0TGhFwz5X8HOQe2+Qrq/9wT7pyzOFU
 | 
					 | 
				
			||||||
LsMwe71OhTjA5XrBTawU9QkWjPx2LZyb/WEkzlLOCGoHTUm4X03xY/1UeHVYZt2k
 | 
					 | 
				
			||||||
wbLses0JHK1h2ttWnO5y68LovZWJqFdIjoCCkgfo0nNUD5i+e51xEju9OBJMngj+
 | 
					 | 
				
			||||||
LnPb6YCqFh4Fxy09WORD0A==
 | 
					 | 
				
			||||||
-----END AGE ENCRYPTED FILE-----
 | 
					 | 
				
			||||||
@@ -1,18 +1,14 @@
 | 
				
			|||||||
-----BEGIN AGE ENCRYPTED FILE-----
 | 
					-----BEGIN AGE ENCRYPTED FILE-----
 | 
				
			||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyBtay96
 | 
					YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IERMTWVGZyByYlJn
 | 
				
			||||||
encxaVJmQWhqenRmVjZkdDVFdnNINENTT0RLUGxsUkdoK1pvMjBjCjUycDh3ZTAr
 | 
					aERLcEhadS9jVUlyUmgxWEk5K0U2cE9WUlhCc0ZXbzhDRnZLTERvCmo2Vy9XeFhq
 | 
				
			||||||
QnN5MkdaY1ozR1pRNGVVL0pQZWtYMXd0dlo3cnNiQWhjSkUKLT4gc3NoLWVkMjU1
 | 
					NTcwdG5PZjlDb1JIM3BYWEVzMlBFWHFmRWt2dkF2OEQ2TDQKLT4gc3NoLWVkMjU1
 | 
				
			||||||
MTkgWk5xSW9nIDIvNFZURjZQeW4wRkpqZS9YRXhhRFYwMmx3Mks4czJidFo3elht
 | 
					MTkgT0VxTXNnIHROaUlGUExERTZFaU5QL3dBcFpQVWNobGQwSEZ1YTU3NXJkekRi
 | 
				
			||||||
ZVhBejQKTXpqUGVHcytSbENoc3hQZ01wcXBQMklMNU1XTnp4TmtvenFoaGphS3Qz
 | 
					c0RUMGsKUHg4V0hIdFJ0aGxwOTFhaVB6MUdVWE0wUFgrMjI2am5uZlhWL09ObjhB
 | 
				
			||||||
MAotPiBzc2gtZWQyNTUxOSBzK3FSZmcgV2J4TlhYQXVwdisyWmF1QTkzUXUvNEVt
 | 
					VQotPiBYMjU1MTkgTWwyQjZjcUFYQ01KUHpoajRrVkpZd0czSzVrMTZxdjVHaHRh
 | 
				
			||||||
ZTRoM0ppQVdFZDFsUCtYbnlUUQpqWmYxYTZ3ZnFVYk5SSWN5QUt4MFlUMFFrdDUx
 | 
					bERCSjBqSQpYOXJibDZPM2Z6bkNCSGpMRExZT21UTzU0N0RiT2FNM0l3N1pnRkl6
 | 
				
			||||||
MjF6b1lDbkVaMElnLzNNCi0+IHNzaC1lZDI1NTE5IE9FcU1zZyByNWNDQkRmMHlD
 | 
					WUJBCi0+IE0qLWdyZWFzZSB6TDVwIGRiQm0gajFFIEVqUXcKU3pEOFBqRVQ0dDZi
 | 
				
			||||||
NFExRVk3MHhjYnREcXh2ZmVDMnNEaE5lWks2azlHTEVnCnNXQm94eTJPVk1mYmxZ
 | 
					REszS1h0T2FnOFF6cHBrN2xtOHdEQkIrCi0tLSBTM3EwNHhDaEo1eldDOTN5dzQz
 | 
				
			||||||
U1RqRTE1bDVHNFY2c0VQS1QyQWx6TGRYL01HRzAKLT4gWDI1NTE5IFMrZnlnNTQ1
 | 
					Q3Rpeno1K25KRU15L01wU21tczNmdlVJCqHBdFLovtLJGH9IY86pvc3xhpoLnfI/
 | 
				
			||||||
UFdQZ0RnRUdiMkNTaXhjRnVFcUpULzJveFNyd2FGcmVJaDAKU2hzZ0NxYzU4ZEgv
 | 
					OVAF5RdpR9T2oNCr3oAiVURkPocYXLHnbjZhLKoj3uDoSZAE52VN9l05jhyX1wwY
 | 
				
			||||||
VnRqNlJIRmFHSisyWWlaTGVtbDFITHljWGt2b0V3bwotPiBbNFpCbn0tZ3JlYXNl
 | 
					/Vfnp48kP8xfbQ==
 | 
				
			||||||
IDxDeCBKbiBBP0ImJCBQClJBV2gwUy9ldUU0MUFPczFRTXVEeHR4akZqTEEKLS0t
 | 
					 | 
				
			||||||
IFY1Z0V5Z1Z2U0Q4alFmaFV5bnY3QjRxOTlkTWRRL0hVTlRiWWk2MWdXdVkKS8oI
 | 
					 | 
				
			||||||
z3Eyu1ZdBwLrTINoorZTBBgx8vp5iIdUevCg4dyH3WnkW/DHXZuuRGSH6xiSAroH
 | 
					 | 
				
			||||||
JI5toFkwp3ZHWcodcYNvyP7ECRBsTyuCk7aRPgnZ
 | 
					 | 
				
			||||||
-----END AGE ENCRYPTED FILE-----
 | 
					-----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								secrets/whale2/enshrouded.env.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								secrets/whale2/enshrouded.env.age
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					-----BEGIN AGE ENCRYPTED FILE-----
 | 
				
			||||||
 | 
					YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IC9FSlh2ZyBQc3dL
 | 
				
			||||||
 | 
					bkttTXJPWnZzYVJ6OUc2cjJvZWJLWHk2QXYvRU9TL3RBTmFmQ1dNClRtaUwvcDJa
 | 
				
			||||||
 | 
					c3h6eXpPR3dKSVZDVHJzNjR4b0Y5K3Zadk5vTkZiZS9RYkEKLT4gWDI1NTE5IE9R
 | 
				
			||||||
 | 
					Y0g2bEJsNmdLaVJteDJaakFMZEdxRU55N2pNbzhkakxuRVFmdVN0ajQKZXZrRHdu
 | 
				
			||||||
 | 
					WFFwMUFkUmJQbm9ONlFRWGdMWmtsWHlOaWVjMGtMdVM1YmdoUQotPiAwIm5PWS1n
 | 
				
			||||||
 | 
					cmVhc2UgUUosbyl4CkFIWDA4L3YwOFBYVUFMZnB6U3VkNFJQVFlEMThVeTV4bHlu
 | 
				
			||||||
 | 
					QmF2TFBobmtJS1hERUtSZld2UEZyb29nNEdGdWEKenliMmhQL1VrY2dFS3VzSEZB
 | 
				
			||||||
 | 
					dm1jT2xOQkxnbCtBV21WT3ZMVjl0WEpPWQotLS0gckNCZEp3VU56eTFFR1ZzbTc3
 | 
				
			||||||
 | 
					WTRIcVZGY0Z1YlNUS3l0cWJ1TW5YUjF6SQoqTDq/up9Q3tQnNJdsnfiwYqA5LW6G
 | 
				
			||||||
 | 
					nKJXGbpnt3dpXxv/1+KRgF6pVKVQtyNFncQW7SC6K4uFw7iv6A==
 | 
				
			||||||
 | 
					-----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
		Reference in New Issue
	
	Block a user