Compare commits
	
		
			No commits in common. "900f95169fdcf43b62d77e572c24f002b8f7b6ab" and "5aaa1fb4176d334bfeb72e1416f43c009d9bfe2f" have entirely different histories.
		
	
	
		
			900f95169f
			...
			5aaa1fb417
		
	
		
					 84 changed files with 710 additions and 1147 deletions
				
			
		
							
								
								
									
										30
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										30
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -935,11 +935,11 @@
 | 
			
		|||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1726989464,
 | 
			
		||||
        "narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=",
 | 
			
		||||
        "lastModified": 1720042825,
 | 
			
		||||
        "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=",
 | 
			
		||||
        "owner": "nix-community",
 | 
			
		||||
        "repo": "home-manager",
 | 
			
		||||
        "rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176",
 | 
			
		||||
        "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1519,11 +1519,11 @@
 | 
			
		|||
    },
 | 
			
		||||
    "nixpkgs_4": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1731797254,
 | 
			
		||||
        "narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=",
 | 
			
		||||
        "lastModified": 1722221733,
 | 
			
		||||
        "narHash": "sha256-sga9SrrPb+pQJxG1ttJfMPheZvDOxApFfwXCFO0H9xw=",
 | 
			
		||||
        "owner": "nixos",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59",
 | 
			
		||||
        "rev": "12bf09802d77264e441f48e25459c10c93eada2e",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1535,11 +1535,11 @@
 | 
			
		|||
    },
 | 
			
		||||
    "nixpkgs_5": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1728740863,
 | 
			
		||||
        "narHash": "sha256-u+rxA79a0lyhG+u+oPBRtTDtzz8kvkc9a6SWSt9ekVc=",
 | 
			
		||||
        "lastModified": 1719707984,
 | 
			
		||||
        "narHash": "sha256-RoxIr/fbndtuKqulGvNCcuzC6KdAib85Q8gXnjzA1dw=",
 | 
			
		||||
        "owner": "nixos",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "a3f9ad65a0bf298ed5847629a57808b97e6e8077",
 | 
			
		||||
        "rev": "7dca15289a1c2990efbe4680f0923ce14139b042",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1555,11 +1555,11 @@
 | 
			
		|||
        "snowfall-lib": "snowfall-lib"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1731604482,
 | 
			
		||||
        "narHash": "sha256-r75GaDBrZFNHSvhcTR5e0JlgSBALvmwFpgNq58pZ4Pg=",
 | 
			
		||||
        "lastModified": 1721741092,
 | 
			
		||||
        "narHash": "sha256-ghFoP5gZpc1i4I4PiVCH00QNZ6s6ipGUcA0P1TsSSC8=",
 | 
			
		||||
        "owner": "matter-labs",
 | 
			
		||||
        "repo": "nixsgx",
 | 
			
		||||
        "rev": "4ec107365fb8403b5dddf35f0ef940bc5657af22",
 | 
			
		||||
        "rev": "be2c19592d0d5601184c52c07ab6d88dec07ffd6",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			@ -2649,11 +2649,11 @@
 | 
			
		|||
    },
 | 
			
		||||
    "unstable": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1731676054,
 | 
			
		||||
        "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
 | 
			
		||||
        "lastModified": 1722185531,
 | 
			
		||||
        "narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=",
 | 
			
		||||
        "owner": "nixos",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
 | 
			
		||||
        "rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								flake.nix
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -45,8 +45,7 @@
 | 
			
		|||
    attic.inputs.nixpkgs.follows = "nixpkgs";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  outputs =
 | 
			
		||||
    inputs:
 | 
			
		||||
  outputs = inputs:
 | 
			
		||||
    let
 | 
			
		||||
      lib = inputs.snowfall-lib.mkLib {
 | 
			
		||||
        inherit inputs;
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +66,9 @@
 | 
			
		|||
        allowUnfree = true;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      homes.modules = with inputs; [ neovim-flake.homeManagerModules.default ];
 | 
			
		||||
      homes.modules = with inputs; [
 | 
			
		||||
        neovim-flake.homeManagerModules.default
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      systems.modules.nixos = with inputs; [
 | 
			
		||||
        lanzaboote.nixosModules.lanzaboote
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +79,9 @@
 | 
			
		|||
        attic.nixosModules.atticd
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      overlays = with inputs; [ nixsgx-flake.overlays.default ];
 | 
			
		||||
      overlays = with inputs; [
 | 
			
		||||
        nixsgx-flake.overlays.default
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      outputs-builder = channels: {
 | 
			
		||||
        formatter = channels.nixpkgs.nixfmt-rfc-style;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, pkgs
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home = {
 | 
			
		||||
| 
						 | 
				
			
			@ -30,3 +29,4 @@
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, pkgs
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home.sessionPath = [ "$HOME/bin" ];
 | 
			
		||||
| 
						 | 
				
			
			@ -33,44 +32,43 @@
 | 
			
		|||
  xdg.enable = true;
 | 
			
		||||
  xdg.mime.enable = true;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
    *****************************************
 | 
			
		||||
      systemd.user.services = {
 | 
			
		||||
      render_blog = {
 | 
			
		||||
        Service = {
 | 
			
		||||
          Type = "oneshot";
 | 
			
		||||
          Environment = "PATH=/run/current-system/sw/bin";
 | 
			
		||||
          ExecStart = toString (
 | 
			
		||||
            pkgs.writeShellScript "render_blog.sh" ''
 | 
			
		||||
              set -eou pipefail
 | 
			
		||||
              set -x
 | 
			
		||||
              DIR=/var/tmp/blog.$$
 | 
			
		||||
              rm -fr $DIR
 | 
			
		||||
              mkdir -p $DIR
 | 
			
		||||
              cd $DIR
 | 
			
		||||
              echo $HOME
 | 
			
		||||
              set
 | 
			
		||||
              git config --list
 | 
			
		||||
              git clone --recurse-submodules https://git.hoyer.xyz/harald/blog.git
 | 
			
		||||
              cd blog
 | 
			
		||||
              ./build.sh
 | 
			
		||||
              cd /var/tmp
 | 
			
		||||
              rm -fr $DIR
 | 
			
		||||
            ''
 | 
			
		||||
          );
 | 
			
		||||
        };
 | 
			
		||||
        Install.WantedBy = [ "default.target" ];
 | 
			
		||||
      };
 | 
			
		||||
  /* *****************************************
 | 
			
		||||
    systemd.user.services = {
 | 
			
		||||
    render_blog = {
 | 
			
		||||
      Service = {
 | 
			
		||||
        Type = "oneshot";
 | 
			
		||||
        Environment = "PATH=/run/current-system/sw/bin";
 | 
			
		||||
        ExecStart = toString (
 | 
			
		||||
          pkgs.writeShellScript "render_blog.sh" ''
 | 
			
		||||
            set -eou pipefail
 | 
			
		||||
            set -x
 | 
			
		||||
            DIR=/var/tmp/blog.$$
 | 
			
		||||
            rm -fr $DIR
 | 
			
		||||
            mkdir -p $DIR
 | 
			
		||||
            cd $DIR
 | 
			
		||||
            echo $HOME
 | 
			
		||||
            set
 | 
			
		||||
            git config --list
 | 
			
		||||
            git clone --recurse-submodules https://git.hoyer.xyz/harald/blog.git
 | 
			
		||||
            cd blog
 | 
			
		||||
            ./build.sh
 | 
			
		||||
            cd /var/tmp
 | 
			
		||||
            rm -fr $DIR
 | 
			
		||||
          ''
 | 
			
		||||
        );
 | 
			
		||||
      };
 | 
			
		||||
      Install.WantedBy = [ "default.target" ];
 | 
			
		||||
    };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
      systemd.user.timers = {
 | 
			
		||||
      render_blog = {
 | 
			
		||||
        Timer = {
 | 
			
		||||
          OnCalendar = "hourly";
 | 
			
		||||
        };
 | 
			
		||||
        Install.WantedBy = [ "timers.target" ];
 | 
			
		||||
    systemd.user.timers = {
 | 
			
		||||
    render_blog = {
 | 
			
		||||
      Timer = {
 | 
			
		||||
        OnCalendar = "hourly";
 | 
			
		||||
      };
 | 
			
		||||
      };
 | 
			
		||||
    *****************************
 | 
			
		||||
  */
 | 
			
		||||
      Install.WantedBy = [ "timers.target" ];
 | 
			
		||||
    };
 | 
			
		||||
    };
 | 
			
		||||
  ***************************** */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, pkgs
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home = {
 | 
			
		||||
| 
						 | 
				
			
			@ -13,10 +12,7 @@
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  nix.settings = {
 | 
			
		||||
    substituters = [
 | 
			
		||||
      "https://cache.nixos.org"
 | 
			
		||||
      "https://attic.teepot.org/tee-pot"
 | 
			
		||||
    ];
 | 
			
		||||
    substituters = [ "https://cache.nixos.org" "https://attic.teepot.org/tee-pot" ];
 | 
			
		||||
    trusted-public-keys = [
 | 
			
		||||
      "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
 | 
			
		||||
      "tee-pot:SS6HcrpG87S1M6HZGPsfo7d1xJccCGev7/tXc5+I4jg="
 | 
			
		||||
| 
						 | 
				
			
			@ -40,3 +36,4 @@
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
{ lib, config, ... }:
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home.sessionPath = [ "$HOME/bin" ];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,3 +27,4 @@
 | 
			
		|||
  xdg.enable = true;
 | 
			
		||||
  xdg.mime.enable = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
{ lib, config, ... }:
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home.sessionPath = [ "$HOME/bin" ];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,3 +27,4 @@
 | 
			
		|||
  xdg.enable = true;
 | 
			
		||||
  xdg.mime.enable = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
{ lib, config, ... }:
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home.sessionPath = [ "$HOME/bin" ];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,3 +63,4 @@
 | 
			
		|||
  xdg.enable = true;
 | 
			
		||||
  xdg.mime.enable = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
{ lib, config, ... }:
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
  home.sessionPath = [ "$HOME/bin" ];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,3 +63,4 @@
 | 
			
		|||
  xdg.enable = true;
 | 
			
		||||
  xdg.mime.enable = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,96 +4,62 @@ rec {
 | 
			
		|||
  ## Renames an alsa device from a given `name` using the new `description`.
 | 
			
		||||
  ##
 | 
			
		||||
  #@ { name: String, description: String } -> { matches: List, apply_properties: Attrs }
 | 
			
		||||
  mkAlsaRename =
 | 
			
		||||
    { name, description }:
 | 
			
		||||
    {
 | 
			
		||||
      matches = [
 | 
			
		||||
        [
 | 
			
		||||
          [
 | 
			
		||||
            "device.name"
 | 
			
		||||
            "matches"
 | 
			
		||||
            name
 | 
			
		||||
          ]
 | 
			
		||||
        ]
 | 
			
		||||
      ];
 | 
			
		||||
      # actions = { "update-props" = { "node.description" = description; }; };
 | 
			
		||||
      apply_properties = {
 | 
			
		||||
        "device.description" = description;
 | 
			
		||||
      };
 | 
			
		||||
  mkAlsaRename = { name, description }: {
 | 
			
		||||
    matches = [
 | 
			
		||||
      [
 | 
			
		||||
        [ "device.name" "matches" name ]
 | 
			
		||||
      ]
 | 
			
		||||
    ];
 | 
			
		||||
    # actions = { "update-props" = { "node.description" = description; }; };
 | 
			
		||||
    apply_properties = {
 | 
			
		||||
      "device.description" = description;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  ## Create a pipewire audio node.
 | 
			
		||||
  ##
 | 
			
		||||
  #@ { name: String, factory: String ? "adapter", ... } -> { factory: String, args: Attrs }
 | 
			
		||||
  mkAudioNode =
 | 
			
		||||
    args@{
 | 
			
		||||
      name,
 | 
			
		||||
      factory ? "adapter",
 | 
			
		||||
      ...
 | 
			
		||||
    }:
 | 
			
		||||
    {
 | 
			
		||||
      inherit factory;
 | 
			
		||||
      args =
 | 
			
		||||
        (builtins.removeAttrs args [
 | 
			
		||||
          "name"
 | 
			
		||||
          "description"
 | 
			
		||||
        ])
 | 
			
		||||
        // {
 | 
			
		||||
          "node.name" = name;
 | 
			
		||||
          "node.description" = args.description or args."node.description";
 | 
			
		||||
          "factory.name" = args."factory.name" or "support.null-audio-sink";
 | 
			
		||||
        };
 | 
			
		||||
  mkAudioNode = args@{ name, factory ? "adapter", ... }: {
 | 
			
		||||
    inherit factory;
 | 
			
		||||
    args = (builtins.removeAttrs args [ "name" "description" ]) // {
 | 
			
		||||
      "node.name" = name;
 | 
			
		||||
      "node.description" = args.description or args."node.description";
 | 
			
		||||
      "factory.name" = args."factory.name" or "support.null-audio-sink";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  ## Create a virtual pipewire audio node.
 | 
			
		||||
  ##
 | 
			
		||||
  #@ { name: String, ... } -> { factory: "adapter", args: Attrs }
 | 
			
		||||
  mkVirtualAudioNode =
 | 
			
		||||
    args@{ name, ... }:
 | 
			
		||||
    mkAudioNode (
 | 
			
		||||
      args
 | 
			
		||||
      // {
 | 
			
		||||
        name = "virtual-${lib.toLower name}-audio";
 | 
			
		||||
        description = "${name} (Virtual)";
 | 
			
		||||
        "media.class" = args.class or args."media.class" or "Audio/Duplex";
 | 
			
		||||
        "object.linger" = args."object.linger" or true;
 | 
			
		||||
        "audio.position" =
 | 
			
		||||
          args."audio.position" or [
 | 
			
		||||
            "FL"
 | 
			
		||||
            "FR"
 | 
			
		||||
          ];
 | 
			
		||||
        "monitor.channel-volumes" = args."monitor.channel-volumes" or true;
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  mkVirtualAudioNode = args@{ name, ... }:
 | 
			
		||||
    mkAudioNode (args // {
 | 
			
		||||
      name = "virtual-${lib.toLower name}-audio";
 | 
			
		||||
      description = "${name} (Virtual)";
 | 
			
		||||
      "media.class" = args.class or args."media.class" or "Audio/Duplex";
 | 
			
		||||
      "object.linger" = args."object.linger" or true;
 | 
			
		||||
      "audio.position" = args."audio.position" or [ "FL" "FR" ];
 | 
			
		||||
      "monitor.channel-volumes" = args."monitor.channel-volumes" or true;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
  ## Connect two pipewire audio nodes
 | 
			
		||||
  ##
 | 
			
		||||
  #@ { name: String?, from: String, to: String, ... } -> { name: "libpipewire-module-loopback", args: Attrs }
 | 
			
		||||
  mkBridgeAudioModule =
 | 
			
		||||
    args@{ from, to, ... }:
 | 
			
		||||
    {
 | 
			
		||||
      name = "libpipewire-module-loopback";
 | 
			
		||||
      args =
 | 
			
		||||
        (builtins.removeAttrs args [
 | 
			
		||||
          "from"
 | 
			
		||||
          "to"
 | 
			
		||||
          "name"
 | 
			
		||||
        ])
 | 
			
		||||
        // {
 | 
			
		||||
          "node.name" =
 | 
			
		||||
            if args ? name then "${args.name}-bridge" else "${lib.toLower from}-to-${lib.toLower to}-bridge";
 | 
			
		||||
          "audio.position" =
 | 
			
		||||
            args."audio.position" or [
 | 
			
		||||
              "FL"
 | 
			
		||||
              "FR"
 | 
			
		||||
            ];
 | 
			
		||||
          "capture.props" = {
 | 
			
		||||
            "node.target" = from;
 | 
			
		||||
          } // (args."capture.props" or { });
 | 
			
		||||
          "playback.props" = {
 | 
			
		||||
            "node.target" = to;
 | 
			
		||||
            "monitor.channel-volumes" = true;
 | 
			
		||||
          } // (args."playback.props" or { });
 | 
			
		||||
        };
 | 
			
		||||
  mkBridgeAudioModule = args@{ from, to, ... }: {
 | 
			
		||||
    name = "libpipewire-module-loopback";
 | 
			
		||||
    args = (builtins.removeAttrs args [ "from" "to" "name" ]) // {
 | 
			
		||||
      "node.name" =
 | 
			
		||||
        if args ? name then
 | 
			
		||||
          "${args.name}-bridge"
 | 
			
		||||
        else
 | 
			
		||||
          "${lib.toLower from}-to-${lib.toLower to}-bridge";
 | 
			
		||||
      "audio.position" = args."audio.position" or [ "FL" "FR" ];
 | 
			
		||||
      "capture.props" = {
 | 
			
		||||
        "node.target" = from;
 | 
			
		||||
      } // (args."capture.props" or { });
 | 
			
		||||
      "playback.props" = {
 | 
			
		||||
        "node.target" = to;
 | 
			
		||||
        "monitor.channel-volumes" = true;
 | 
			
		||||
      } // (args."playback.props" or { });
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  inputs,
 | 
			
		||||
  snowfall-inputs,
 | 
			
		||||
}:
 | 
			
		||||
{ lib, inputs, snowfall-inputs }:
 | 
			
		||||
 | 
			
		||||
rec {
 | 
			
		||||
  ## Override a package's metadata
 | 
			
		||||
| 
						 | 
				
			
			@ -17,8 +13,7 @@ rec {
 | 
			
		|||
  ## ```
 | 
			
		||||
  ##
 | 
			
		||||
  #@ Attrs -> Package -> Package
 | 
			
		||||
  override-meta =
 | 
			
		||||
    meta: package:
 | 
			
		||||
  override-meta = meta: package:
 | 
			
		||||
    package.overrideAttrs (attrs: {
 | 
			
		||||
      meta = (attrs.meta or { }) // meta;
 | 
			
		||||
    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,42 +16,36 @@ rec {
 | 
			
		|||
  ## ```
 | 
			
		||||
  ##
 | 
			
		||||
  #@ { self: Flake, overrides: Attrs ? {} } -> Attrs
 | 
			
		||||
  mkDeploy =
 | 
			
		||||
    {
 | 
			
		||||
      self,
 | 
			
		||||
      overrides ? { },
 | 
			
		||||
    }:
 | 
			
		||||
  mkDeploy = { self, overrides ? { } }:
 | 
			
		||||
    let
 | 
			
		||||
      hosts = self.nixosConfigurations or { };
 | 
			
		||||
      names = builtins.attrNames hosts;
 | 
			
		||||
      nodes = lib.foldl (
 | 
			
		||||
        result: name:
 | 
			
		||||
        let
 | 
			
		||||
          host = hosts.${name};
 | 
			
		||||
          user = host.config.metacfg.user.name or null;
 | 
			
		||||
          inherit (host.pkgs) system;
 | 
			
		||||
        in
 | 
			
		||||
        result
 | 
			
		||||
        // {
 | 
			
		||||
          ${name} = (overrides.${name} or { }) // {
 | 
			
		||||
            hostname = overrides.${name}.hostname or "${name}";
 | 
			
		||||
            profiles = (overrides.${name}.profiles or { }) // {
 | 
			
		||||
              system =
 | 
			
		||||
                (overrides.${name}.profiles.system or { })
 | 
			
		||||
                // {
 | 
			
		||||
      nodes = lib.foldl
 | 
			
		||||
        (result: name:
 | 
			
		||||
          let
 | 
			
		||||
            host = hosts.${name};
 | 
			
		||||
            user = host.config.metacfg.user.name or null;
 | 
			
		||||
            inherit (host.pkgs) system;
 | 
			
		||||
          in
 | 
			
		||||
          result // {
 | 
			
		||||
            ${name} = (overrides.${name} or { }) // {
 | 
			
		||||
              hostname = overrides.${name}.hostname or "${name}";
 | 
			
		||||
              profiles = (overrides.${name}.profiles or { }) // {
 | 
			
		||||
                system = (overrides.${name}.profiles.system or { }) // {
 | 
			
		||||
                  path = deploy-rs.lib.${system}.activate.nixos host;
 | 
			
		||||
                }
 | 
			
		||||
                // lib.optionalAttrs (user != null) {
 | 
			
		||||
                } // lib.optionalAttrs (user != null) {
 | 
			
		||||
                  user = "root";
 | 
			
		||||
                  sshUser = user;
 | 
			
		||||
                }
 | 
			
		||||
                // lib.optionalAttrs (host.config.metacfg.security.doas.enable or false) { sudo = "doas -u"; };
 | 
			
		||||
                } // lib.optionalAttrs
 | 
			
		||||
                  (host.config.metacfg.security.doas.enable or false)
 | 
			
		||||
                  {
 | 
			
		||||
                    sudo = "doas -u";
 | 
			
		||||
                  };
 | 
			
		||||
              };
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      ) { } names;
 | 
			
		||||
          })
 | 
			
		||||
        { }
 | 
			
		||||
        names;
 | 
			
		||||
    in
 | 
			
		||||
    {
 | 
			
		||||
      inherit nodes;
 | 
			
		||||
    };
 | 
			
		||||
    { inherit nodes; };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
{ lib, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
rec {
 | 
			
		||||
with lib; rec {
 | 
			
		||||
  ## Create a NixOS module option.
 | 
			
		||||
  ##
 | 
			
		||||
  ## ```nix
 | 
			
		||||
| 
						 | 
				
			
			@ -9,8 +8,7 @@ rec {
 | 
			
		|||
  ## ```
 | 
			
		||||
  ##
 | 
			
		||||
  #@ Type -> Any -> String
 | 
			
		||||
  mkOpt =
 | 
			
		||||
    type: default: description:
 | 
			
		||||
  mkOpt = type: default: description:
 | 
			
		||||
    mkOption { inherit type default description; };
 | 
			
		||||
 | 
			
		||||
  ## Create a NixOS module option without a description.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  inputs,
 | 
			
		||||
  snowfall-inputs,
 | 
			
		||||
}:
 | 
			
		||||
{ lib, inputs, snowfall-inputs }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (inputs.nixpkgs.lib) assertMsg last;
 | 
			
		||||
| 
						 | 
				
			
			@ -13,17 +9,14 @@ in
 | 
			
		|||
    # Type: String -> Attrs
 | 
			
		||||
    # Usage: get-address-parts "bismuth:3000"
 | 
			
		||||
    #   result: { host = "bismuth"; port = "3000"; }
 | 
			
		||||
    get-address-parts =
 | 
			
		||||
      address:
 | 
			
		||||
    get-address-parts = address:
 | 
			
		||||
      let
 | 
			
		||||
        address-parts = builtins.split ":" address;
 | 
			
		||||
        ip = builtins.head address-parts;
 | 
			
		||||
        host = if ip == "" then "127.0.0.1" else ip;
 | 
			
		||||
        port = if builtins.length address-parts != 3 then "" else last address-parts;
 | 
			
		||||
      in
 | 
			
		||||
      {
 | 
			
		||||
        inherit host port;
 | 
			
		||||
      };
 | 
			
		||||
      { inherit host port; };
 | 
			
		||||
 | 
			
		||||
    ## Create proxy configuration for NGINX virtual hosts.
 | 
			
		||||
    ##
 | 
			
		||||
| 
						 | 
				
			
			@ -40,23 +33,22 @@ in
 | 
			
		|||
    ##
 | 
			
		||||
    #@ { port: Int ? null, host: String ? "127.0.0.1", proxy-web-sockets: Bool ? false, extra-config: Attrs ? { } } -> Attrs
 | 
			
		||||
    create-proxy =
 | 
			
		||||
      {
 | 
			
		||||
        port ? null,
 | 
			
		||||
        host ? "127.0.0.1",
 | 
			
		||||
        proxy-web-sockets ? false,
 | 
			
		||||
        extra-config ? { },
 | 
			
		||||
      { port ? null
 | 
			
		||||
      , host ? "127.0.0.1"
 | 
			
		||||
      , proxy-web-sockets ? false
 | 
			
		||||
      , extra-config ? { }
 | 
			
		||||
      }:
 | 
			
		||||
      assert assertMsg (port != "" && port != null) "port cannot be empty";
 | 
			
		||||
      assert assertMsg (host != "") "host cannot be empty";
 | 
			
		||||
      extra-config
 | 
			
		||||
      // {
 | 
			
		||||
        locations = (extra-config.locations or { }) // {
 | 
			
		||||
          "/" = (extra-config.locations."/" or { }) // {
 | 
			
		||||
            proxyPass = "http://${host}${if port != null then ":${builtins.toString port}" else ""}";
 | 
			
		||||
        assert assertMsg (port != "" && port != null) "port cannot be empty";
 | 
			
		||||
        assert assertMsg (host != "") "host cannot be empty";
 | 
			
		||||
        extra-config // {
 | 
			
		||||
          locations = (extra-config.locations or { }) // {
 | 
			
		||||
            "/" = (extra-config.locations."/" or { }) // {
 | 
			
		||||
              proxyPass =
 | 
			
		||||
                "http://${host}${if port != null then ":${builtins.toString port}" else ""}";
 | 
			
		||||
 | 
			
		||||
            proxyWebsockets = proxy-web-sockets;
 | 
			
		||||
              proxyWebsockets = proxy-web-sockets;
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  inputs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, inputs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,10 +11,10 @@ in
 | 
			
		|||
  # ];
 | 
			
		||||
 | 
			
		||||
  options.metacfg.home = with types; {
 | 
			
		||||
    file = mkOpt attrs { } "A set of files to be managed by home-manager's <option>home.file</option>.";
 | 
			
		||||
    configFile =
 | 
			
		||||
      mkOpt attrs { }
 | 
			
		||||
        "A set of files to be managed by home-manager's <option>xdg.configFile</option>.";
 | 
			
		||||
    file = mkOpt attrs { }
 | 
			
		||||
      "A set of files to be managed by home-manager's <option>home.file</option>.";
 | 
			
		||||
    configFile = mkOpt attrs { }
 | 
			
		||||
      "A set of files to be managed by home-manager's <option>xdg.configFile</option>.";
 | 
			
		||||
    extraOptions = mkOpt attrs { } "Options to pass directly to home-manager.";
 | 
			
		||||
    homeConfig = mkOpt attrs { } "Final config for home-manager.";
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
{ options
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, lib
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
with lib.metacfg; let
 | 
			
		||||
  cfg = config.metacfg.nix;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -26,10 +24,7 @@ in
 | 
			
		|||
 | 
			
		||||
    nix =
 | 
			
		||||
      let
 | 
			
		||||
        users = [
 | 
			
		||||
          "root"
 | 
			
		||||
          config.metacfg.user.name
 | 
			
		||||
        ];
 | 
			
		||||
        users = [ "root" config.metacfg.user.name ];
 | 
			
		||||
      in
 | 
			
		||||
      {
 | 
			
		||||
        package = cfg.package;
 | 
			
		||||
| 
						 | 
				
			
			@ -65,9 +60,7 @@ in
 | 
			
		|||
 | 
			
		||||
        gc = {
 | 
			
		||||
          automatic = true;
 | 
			
		||||
          interval = {
 | 
			
		||||
            Day = 7;
 | 
			
		||||
          };
 | 
			
		||||
          interval = { Day = 7; };
 | 
			
		||||
          options = "--delete-older-than 30d";
 | 
			
		||||
          user = config.metacfg.user.name;
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  inputs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, inputs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +21,9 @@ in
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    environment.systemPackages = with pkgs; [ gnupg ];
 | 
			
		||||
    environment.systemPackages = with pkgs; [
 | 
			
		||||
      gnupg
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    environment.shellInit = ''
 | 
			
		||||
      export GPG_TTY="$(tty)"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ options
 | 
			
		||||
, config
 | 
			
		||||
, lib
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,10 +37,7 @@ in
 | 
			
		|||
        wget
 | 
			
		||||
        starship
 | 
			
		||||
      ];
 | 
			
		||||
      shells = [
 | 
			
		||||
        pkgs.fish
 | 
			
		||||
        pkgs.bash
 | 
			
		||||
      ];
 | 
			
		||||
      shells = [ pkgs.fish pkgs.bash ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    programs = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,5 +11,7 @@ in
 | 
			
		|||
    enable = mkOpt types.bool true "Whether to enable the Nix daemon.";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable { services.nix-daemon = enabled; };
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    services.nix-daemon = enabled;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.system.fonts;
 | 
			
		||||
let cfg = config.metacfg.system.fonts;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.system.fonts = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,16 +17,14 @@ in
 | 
			
		|||
    };
 | 
			
		||||
 | 
			
		||||
    fonts = {
 | 
			
		||||
      packages =
 | 
			
		||||
        with pkgs;
 | 
			
		||||
      packages = with pkgs;
 | 
			
		||||
        [
 | 
			
		||||
          noto-fonts
 | 
			
		||||
          noto-fonts-cjk-sans
 | 
			
		||||
          noto-fonts-cjk-serif
 | 
			
		||||
          noto-fonts-emoji
 | 
			
		||||
          (nerdfonts.override { fonts = [ "Hack" ]; })
 | 
			
		||||
        ]
 | 
			
		||||
        ++ cfg.fonts;
 | 
			
		||||
        ] ++ cfg.fonts;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.system.interface;
 | 
			
		||||
let cfg = config.metacfg.system.interface;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.system.interface = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -17,26 +10,25 @@ in
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    system.activationScripts.applications.text =
 | 
			
		||||
      let
 | 
			
		||||
        env = pkgs.buildEnv {
 | 
			
		||||
          name = "system-applications";
 | 
			
		||||
          paths = config.environment.systemPackages;
 | 
			
		||||
          pathsToLink = "/Applications";
 | 
			
		||||
        };
 | 
			
		||||
      in
 | 
			
		||||
    system.activationScripts.applications.text = let
 | 
			
		||||
      env = pkgs.buildEnv {
 | 
			
		||||
        name = "system-applications";
 | 
			
		||||
        paths = config.environment.systemPackages;
 | 
			
		||||
        pathsToLink = "/Applications";
 | 
			
		||||
      };
 | 
			
		||||
    in
 | 
			
		||||
      lib.mkForce ''
 | 
			
		||||
        # Set up applications.
 | 
			
		||||
        echo "setting up /Applications..." >&2
 | 
			
		||||
        rm -rf /Applications/Nix\ Apps
 | 
			
		||||
        mkdir -p /Applications/Nix\ Apps
 | 
			
		||||
        find ${env}/Applications -maxdepth 1 -type l -exec readlink '{}' + |
 | 
			
		||||
        while read -r src; do
 | 
			
		||||
          app_name=$(basename "$src")
 | 
			
		||||
          echo "copying $src" >&2
 | 
			
		||||
          ${pkgs.mkalias}/bin/mkalias "$src" "/Applications/Nix Apps/$app_name"
 | 
			
		||||
        done
 | 
			
		||||
      '';
 | 
			
		||||
      # Set up applications.
 | 
			
		||||
      echo "setting up /Applications..." >&2
 | 
			
		||||
      rm -rf /Applications/Nix\ Apps
 | 
			
		||||
      mkdir -p /Applications/Nix\ Apps
 | 
			
		||||
      find ${env}/Applications -maxdepth 1 -type l -exec readlink '{}' + |
 | 
			
		||||
      while read -r src; do
 | 
			
		||||
        app_name=$(basename "$src")
 | 
			
		||||
        echo "copying $src" >&2
 | 
			
		||||
        ${pkgs.mkalias}/bin/mkalias "$src" "/Applications/Nix Apps/$app_name"
 | 
			
		||||
      done
 | 
			
		||||
          '';
 | 
			
		||||
 | 
			
		||||
    system.defaults = {
 | 
			
		||||
      dock.autohide = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types mkIf mkDefault;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +14,9 @@ in
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.packages = with pkgs; [ bashInteractive ];
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      bashInteractive
 | 
			
		||||
    ];
 | 
			
		||||
    programs.bash = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      initExtra = ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,10 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
with lib.metacfg; let
 | 
			
		||||
  cfg = config.metacfg.cli-apps.bat;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -18,12 +16,7 @@ in
 | 
			
		|||
    programs.bat = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      config.theme = "ansi";
 | 
			
		||||
      extraPackages = with pkgs.bat-extras; [
 | 
			
		||||
        batdiff
 | 
			
		||||
        batman
 | 
			
		||||
        batgrep
 | 
			
		||||
        batwatch
 | 
			
		||||
      ];
 | 
			
		||||
      extraPackages = with pkgs.bat-extras; [ batdiff batman batgrep batwatch ];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -34,17 +33,15 @@ in
 | 
			
		|||
        end
 | 
			
		||||
      '';
 | 
			
		||||
 | 
			
		||||
      plugins = [
 | 
			
		||||
        {
 | 
			
		||||
          name = "foreign-env";
 | 
			
		||||
          src = pkgs.fetchFromGitHub {
 | 
			
		||||
            owner = "oh-my-fish";
 | 
			
		||||
            repo = "plugin-foreign-env";
 | 
			
		||||
            rev = "dddd9213272a0ab848d474d0cbde12ad034e65bc";
 | 
			
		||||
            sha256 = "00xqlyl3lffc5l0viin1nyp819wf81fncqyz87jx8ljjdhilmgbs";
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
      plugins = [{
 | 
			
		||||
        name = "foreign-env";
 | 
			
		||||
        src = pkgs.fetchFromGitHub {
 | 
			
		||||
          owner = "oh-my-fish";
 | 
			
		||||
          repo = "plugin-foreign-env";
 | 
			
		||||
          rev = "dddd9213272a0ab848d474d0cbde12ad034e65bc";
 | 
			
		||||
          sha256 = "00xqlyl3lffc5l0viin1nyp819wf81fncqyz87jx8ljjdhilmgbs";
 | 
			
		||||
        };
 | 
			
		||||
      }];
 | 
			
		||||
 | 
			
		||||
      #      shellInit =
 | 
			
		||||
      #        ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +24,8 @@ in
 | 
			
		|||
      man = "${pkgs.bat-extras.batman}/bin/batman";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    home.packages = with pkgs; [ vim ];
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      vim
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -204,10 +199,7 @@ in
 | 
			
		|||
              nix = 110;
 | 
			
		||||
              ruby = 120;
 | 
			
		||||
              java = 130;
 | 
			
		||||
              go = [
 | 
			
		||||
                90
 | 
			
		||||
                130
 | 
			
		||||
              ];
 | 
			
		||||
              go = [ 90 130 ];
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			@ -231,10 +223,7 @@ in
 | 
			
		|||
          comment-nvim.enable = true;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        vim.spellChecking.languages = [
 | 
			
		||||
          "en"
 | 
			
		||||
          "de"
 | 
			
		||||
        ];
 | 
			
		||||
        vim.spellChecking.languages = [ "en" "de" ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -16,22 +15,16 @@ in
 | 
			
		|||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      (pkgs.nerdfonts.override {
 | 
			
		||||
        fonts = [
 | 
			
		||||
          "FiraCode"
 | 
			
		||||
          "DroidSansMono"
 | 
			
		||||
          "JetBrainsMono"
 | 
			
		||||
        ];
 | 
			
		||||
      })
 | 
			
		||||
      (pkgs.nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "JetBrainsMono" ]; })
 | 
			
		||||
    ];
 | 
			
		||||
    programs.starship = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      settings = {
 | 
			
		||||
        container.format = "[\\[$name\\]]($style) ";
 | 
			
		||||
        git_status = {
 | 
			
		||||
          ahead = "⇡\${count}";
 | 
			
		||||
          diverged = "⇕⇡\${ahead_count}⇣\${behind_count}";
 | 
			
		||||
          behind = "⇣\${count}";
 | 
			
		||||
          ahead = "⇡$\{count}";
 | 
			
		||||
          diverged = "⇕⇡$\{ahead_count}⇣$\{behind_count}";
 | 
			
		||||
          behind = "⇣$\{count}";
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,10 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
with lib.metacfg; let
 | 
			
		||||
  cfg = config.metacfg.cli-apps.tmux;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -14,5 +12,9 @@ in
 | 
			
		|||
    enable = mkEnableOption "Tmux";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable { home.packages = with pkgs; [ tmux ]; };
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      tmux
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  host ? null,
 | 
			
		||||
  format ? "unknown",
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, host ? null, format ? "unknown", ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -17,13 +16,7 @@ in
 | 
			
		|||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      alacritty
 | 
			
		||||
      (pkgs.nerdfonts.override {
 | 
			
		||||
        fonts = [
 | 
			
		||||
          "FiraCode"
 | 
			
		||||
          "DroidSansMono"
 | 
			
		||||
          "JetBrainsMono"
 | 
			
		||||
        ];
 | 
			
		||||
      })
 | 
			
		||||
      (pkgs.nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "JetBrainsMono" ]; })
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.tools.direnv;
 | 
			
		||||
let cfg = config.metacfg.tools.direnv;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.tools.direnv = with types; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,8 +13,7 @@ in
 | 
			
		|||
    userName = mkOpt types.str user.fullName "The name to configure git with.";
 | 
			
		||||
    userEmail = mkOpt types.str user.email "The email to configure git with.";
 | 
			
		||||
    signingKey =
 | 
			
		||||
      mkOpt types.str "7F3D64824AC0B6B8009E50504BC0896FB5693595"
 | 
			
		||||
        "The key ID to sign commits with.";
 | 
			
		||||
      mkOpt types.str "7F3D64824AC0B6B8009E50504BC0896FB5693595" "The key ID to sign commits with.";
 | 
			
		||||
    signByDefault = mkOpt types.bool false "Whether to sign commits by default.";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,18 +32,10 @@ in
 | 
			
		|||
        inherit (cfg) signByDefault;
 | 
			
		||||
      };
 | 
			
		||||
      extraConfig = {
 | 
			
		||||
        init = {
 | 
			
		||||
          defaultBranch = "main";
 | 
			
		||||
        };
 | 
			
		||||
        pull = {
 | 
			
		||||
          rebase = true;
 | 
			
		||||
        };
 | 
			
		||||
        push = {
 | 
			
		||||
          autoSetupRemote = true;
 | 
			
		||||
        };
 | 
			
		||||
        core = {
 | 
			
		||||
          whitespace = "trailing-space,space-before-tab";
 | 
			
		||||
        };
 | 
			
		||||
        init = { defaultBranch = "main"; };
 | 
			
		||||
        pull = { rebase = true; };
 | 
			
		||||
        push = { autoSetupRemote = true; };
 | 
			
		||||
        core = { whitespace = "trailing-space,space-before-tab"; };
 | 
			
		||||
        safe = {
 | 
			
		||||
          directory = "${user.home}/git";
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.tools.jetbrains;
 | 
			
		||||
let cfg = config.metacfg.tools.jetbrains;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.tools.jetbrains = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -17,16 +10,12 @@ in
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.sessionPath = [ "$HOME/.local/share/JetBrains/Toolbox/scripts" ];
 | 
			
		||||
    home.sessionPath = [
 | 
			
		||||
      "$HOME/.local/share/JetBrains/Toolbox/scripts"
 | 
			
		||||
    ];
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      jetbrains-toolbox
 | 
			
		||||
      (pkgs.nerdfonts.override {
 | 
			
		||||
        fonts = [
 | 
			
		||||
          "FiraCode"
 | 
			
		||||
          "DroidSansMono"
 | 
			
		||||
          "JetBrainsMono"
 | 
			
		||||
        ];
 | 
			
		||||
      })
 | 
			
		||||
      (pkgs.nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "JetBrainsMono" ]; })
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types mkEnableOption mkIf;
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +10,9 @@ in
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.packages = with pkgs; [ mosh ];
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      mosh
 | 
			
		||||
    ];
 | 
			
		||||
    programs.ssh = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      extraConfig = ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  osConfig ? { },
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, config, pkgs, osConfig ? { }, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib)
 | 
			
		||||
    types
 | 
			
		||||
    mkIf
 | 
			
		||||
    mkDefault
 | 
			
		||||
    mkMerge
 | 
			
		||||
    ;
 | 
			
		||||
  inherit (lib) types mkIf mkDefault mkMerge;
 | 
			
		||||
  inherit (lib.metacfg) mkOpt;
 | 
			
		||||
 | 
			
		||||
  cfg = config.metacfg.user;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,15 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  inputs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, inputs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.home;
 | 
			
		||||
let cfg = config.metacfg.home;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.home = with types; {
 | 
			
		||||
    file = mkOpt attrs { } (mdDoc "A set of files to be managed by home-manager's `home.file`.");
 | 
			
		||||
    configFile = mkOpt attrs { } (
 | 
			
		||||
      mdDoc "A set of files to be managed by home-manager's `xdg.configFile`."
 | 
			
		||||
    );
 | 
			
		||||
    file = mkOpt attrs { }
 | 
			
		||||
      (mdDoc "A set of files to be managed by home-manager's `home.file`.");
 | 
			
		||||
    configFile = mkOpt attrs { }
 | 
			
		||||
      (mdDoc "A set of files to be managed by home-manager's `xdg.configFile`.");
 | 
			
		||||
    extraOptions = mkOpt attrs { } "Options to pass directly to home-manager.";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +25,8 @@ in
 | 
			
		|||
      useUserPackages = true;
 | 
			
		||||
      useGlobalPkgs = true;
 | 
			
		||||
 | 
			
		||||
      users.${config.metacfg.user.name} = mkAliasDefinitions options.metacfg.home.extraOptions;
 | 
			
		||||
      users.${config.metacfg.user.name} =
 | 
			
		||||
        mkAliasDefinitions options.metacfg.home.extraOptions;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.nix-ld;
 | 
			
		||||
let cfg = config.metacfg.nix-ld;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.nix-ld = with types; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,25 +1,15 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  inputs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, inputs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.nix;
 | 
			
		||||
 | 
			
		||||
  substituters-submodule = types.submodule (
 | 
			
		||||
    { name, ... }:
 | 
			
		||||
    {
 | 
			
		||||
      options = with types; {
 | 
			
		||||
        key = mkOpt (nullOr str) null "The trusted public key for this substituter.";
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
  substituters-submodule = types.submodule ({ name, ... }: {
 | 
			
		||||
    options = with types; {
 | 
			
		||||
      key = mkOpt (nullOr str) null "The trusted public key for this substituter.";
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.nix = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -28,23 +18,25 @@ in
 | 
			
		|||
 | 
			
		||||
    default-substituter = {
 | 
			
		||||
      url = mkOpt str "https://cache.nixos.org" "The url for the substituter.";
 | 
			
		||||
      key =
 | 
			
		||||
        mkOpt str "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
 | 
			
		||||
          "The trusted public key for the substituter.";
 | 
			
		||||
      key = mkOpt str "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "The trusted public key for the substituter.";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    extra-substituters = mkOpt (attrsOf substituters-submodule) { } "Extra substituters to configure.";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    assertions = mapAttrsToList (name: value: {
 | 
			
		||||
      assertion = value.key != null;
 | 
			
		||||
      message = "metacfg.nix.extra-substituters.${name}.key must be set";
 | 
			
		||||
    }) cfg.extra-substituters;
 | 
			
		||||
    assertions = mapAttrsToList
 | 
			
		||||
      (name: value: {
 | 
			
		||||
        assertion = value.key != null;
 | 
			
		||||
        message = "metacfg.nix.extra-substituters.${name}.key must be set";
 | 
			
		||||
      })
 | 
			
		||||
      cfg.extra-substituters;
 | 
			
		||||
 | 
			
		||||
    environment.systemPackages = with pkgs; [
 | 
			
		||||
      metacfg.nixos-revision
 | 
			
		||||
      (metacfg.nixos-hosts.override { hosts = inputs.self.nixosConfigurations; })
 | 
			
		||||
      (metacfg.nixos-hosts.override {
 | 
			
		||||
        hosts = inputs.self.nixosConfigurations;
 | 
			
		||||
      })
 | 
			
		||||
      deploy-rs
 | 
			
		||||
      nixfmt
 | 
			
		||||
      nix-index
 | 
			
		||||
| 
						 | 
				
			
			@ -56,10 +48,8 @@ in
 | 
			
		|||
 | 
			
		||||
    nix =
 | 
			
		||||
      let
 | 
			
		||||
        users = [
 | 
			
		||||
          "root"
 | 
			
		||||
          config.metacfg.user.name
 | 
			
		||||
        ] ++ optional config.services.hydra.enable "hydra";
 | 
			
		||||
        users = [ "root" config.metacfg.user.name ] ++
 | 
			
		||||
          optional config.services.hydra.enable "hydra";
 | 
			
		||||
        extra-substituters = cfg.extra-substituters // {
 | 
			
		||||
          "https://attic.teepot.org/tee-pot".key = "tee-pot:SS6HcrpG87S1M6HZGPsfo7d1xJccCGev7/tXc5+I4jg=";
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			@ -67,29 +57,29 @@ in
 | 
			
		|||
      {
 | 
			
		||||
        package = cfg.package;
 | 
			
		||||
 | 
			
		||||
        settings =
 | 
			
		||||
          {
 | 
			
		||||
            experimental-features = "nix-command flakes";
 | 
			
		||||
            http-connections = 50;
 | 
			
		||||
            warn-dirty = false;
 | 
			
		||||
            log-lines = 50;
 | 
			
		||||
            sandbox = true;
 | 
			
		||||
            auto-optimise-store = true;
 | 
			
		||||
            trusted-users = users;
 | 
			
		||||
            allowed-users = users;
 | 
			
		||||
        settings = {
 | 
			
		||||
          experimental-features = "nix-command flakes";
 | 
			
		||||
          http-connections = 50;
 | 
			
		||||
          warn-dirty = false;
 | 
			
		||||
          log-lines = 50;
 | 
			
		||||
          sandbox = true;
 | 
			
		||||
          auto-optimise-store = true;
 | 
			
		||||
          trusted-users = users;
 | 
			
		||||
          allowed-users = users;
 | 
			
		||||
 | 
			
		||||
            substituters = [
 | 
			
		||||
              cfg.default-substituter.url
 | 
			
		||||
            ] ++ (mapAttrsToList (name: value: name) extra-substituters);
 | 
			
		||||
            trusted-public-keys = [
 | 
			
		||||
              cfg.default-substituter.key
 | 
			
		||||
            ] ++ (mapAttrsToList (name: value: value.key) extra-substituters);
 | 
			
		||||
          substituters =
 | 
			
		||||
            [ cfg.default-substituter.url ]
 | 
			
		||||
              ++
 | 
			
		||||
              (mapAttrsToList (name: value: name) extra-substituters);
 | 
			
		||||
          trusted-public-keys =
 | 
			
		||||
            [ cfg.default-substituter.key ]
 | 
			
		||||
              ++
 | 
			
		||||
              (mapAttrsToList (name: value: value.key) extra-substituters);
 | 
			
		||||
 | 
			
		||||
          }
 | 
			
		||||
          // (lib.optionalAttrs config.metacfg.tools.direnv.enable {
 | 
			
		||||
            keep-outputs = true;
 | 
			
		||||
            keep-derivations = true;
 | 
			
		||||
          });
 | 
			
		||||
        } // (lib.optionalAttrs config.metacfg.tools.direnv.enable {
 | 
			
		||||
          keep-outputs = true;
 | 
			
		||||
          keep-derivations = true;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        gc = {
 | 
			
		||||
          automatic = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
{ options
 | 
			
		||||
, config
 | 
			
		||||
, lib
 | 
			
		||||
, pkgs
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,9 +39,7 @@ in
 | 
			
		|||
    };
 | 
			
		||||
 | 
			
		||||
    environment = {
 | 
			
		||||
      sessionVariables = {
 | 
			
		||||
        PATH = "$HOME/bin";
 | 
			
		||||
      };
 | 
			
		||||
      sessionVariables = { PATH = "$HOME/bin"; };
 | 
			
		||||
      systemPackages = with pkgs; [
 | 
			
		||||
        age
 | 
			
		||||
        bash
 | 
			
		||||
| 
						 | 
				
			
			@ -76,10 +73,7 @@ in
 | 
			
		|||
            "$@"
 | 
			
		||||
        '')
 | 
			
		||||
      ];
 | 
			
		||||
      shells = [
 | 
			
		||||
        pkgs.fish
 | 
			
		||||
        pkgs.bash
 | 
			
		||||
      ];
 | 
			
		||||
      shells = [ pkgs.fish pkgs.bash ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    hardware = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.gui;
 | 
			
		||||
let cfg = config.metacfg.gui;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.gui = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -67,18 +60,12 @@ in
 | 
			
		|||
    hardware.pulseaudio.enable = false;
 | 
			
		||||
    hardware.opengl = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
 | 
			
		||||
      driSupport = true;
 | 
			
		||||
      driSupport32Bit = true;
 | 
			
		||||
 | 
			
		||||
      extraPackages = with pkgs; [
 | 
			
		||||
        onevpl-intel-gpu
 | 
			
		||||
        intel-compute-runtime
 | 
			
		||||
        intel-media-driver # LIBVA_DRIVER_NAME=iHD
 | 
			
		||||
        #intel-vaapi-driver # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
 | 
			
		||||
        libvdpau-va-gl
 | 
			
		||||
        rocmPackages.clr.icd
 | 
			
		||||
        amdvlk
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
    environment.sessionVariables = {
 | 
			
		||||
| 
						 | 
				
			
			@ -157,13 +144,7 @@ in
 | 
			
		|||
        noto-fonts-emoji
 | 
			
		||||
        liberation_ttf
 | 
			
		||||
        freefont_ttf
 | 
			
		||||
        (nerdfonts.override {
 | 
			
		||||
          fonts = [
 | 
			
		||||
            "FiraCode"
 | 
			
		||||
            "DroidSansMono"
 | 
			
		||||
            "JetBrainsMono"
 | 
			
		||||
          ];
 | 
			
		||||
        })
 | 
			
		||||
        (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "JetBrainsMono" ]; })
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      fontconfig = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.homeprinter;
 | 
			
		||||
let cfg = config.metacfg.homeprinter;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.homeprinter = with types; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.podman;
 | 
			
		||||
let cfg = config.metacfg.podman;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.podman = with types; {
 | 
			
		||||
| 
						 | 
				
			
			@ -25,9 +18,7 @@ in
 | 
			
		|||
        dockerCompat = lib.mkDefault true;
 | 
			
		||||
 | 
			
		||||
        # For Nixos version > 22.11
 | 
			
		||||
        defaultNetwork.settings = {
 | 
			
		||||
          dns_enabled = true;
 | 
			
		||||
        };
 | 
			
		||||
        defaultNetwork.settings = { dns_enabled = true; };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.secureboot;
 | 
			
		||||
let cfg = config.metacfg.secureboot;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.secureboot = with types; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,15 +21,14 @@ in
 | 
			
		|||
      quoteProviderLibrary = pkgs.nixsgx.sgx-dcap.default_qpl;
 | 
			
		||||
    };
 | 
			
		||||
    systemd.services.aesmd = {
 | 
			
		||||
      environment.LD_LIBRARY_PATH = lib.mkForce (
 | 
			
		||||
        lib.makeLibraryPath [
 | 
			
		||||
          pkgs.nixsgx.sgx-dcap.default_qpl
 | 
			
		||||
          pkgs.curl.out
 | 
			
		||||
        ]
 | 
			
		||||
      );
 | 
			
		||||
      environment.LD_LIBRARY_PATH = lib.mkForce (lib.makeLibraryPath [ pkgs.nixsgx.sgx-dcap.default_qpl pkgs.curl.out ]);
 | 
			
		||||
      serviceConfig = {
 | 
			
		||||
        BindReadOnlyPaths = [ "/etc/sgx_default_qcnl.conf" ];
 | 
			
		||||
        BindPaths = [ "/dev/log" ];
 | 
			
		||||
        BindReadOnlyPaths = [
 | 
			
		||||
          "/etc/sgx_default_qcnl.conf"
 | 
			
		||||
        ];
 | 
			
		||||
        BindPaths = [
 | 
			
		||||
          "/dev/log"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -55,19 +49,21 @@ in
 | 
			
		|||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    systemd.services.pccs-secret = {
 | 
			
		||||
      description = "Inject pccs secret";
 | 
			
		||||
      wantedBy = [ "multi-user.target" ];
 | 
			
		||||
      before = [ "podman-pccs.service" ];
 | 
			
		||||
    systemd.services.pccs-secret =
 | 
			
		||||
      {
 | 
			
		||||
        description = "Inject pccs secret";
 | 
			
		||||
        wantedBy = [ "multi-user.target" ];
 | 
			
		||||
        before = [ "podman-pccs.service" ];
 | 
			
		||||
 | 
			
		||||
      serviceConfig = {
 | 
			
		||||
        EnvironmentFile = cfg.secret;
 | 
			
		||||
        ExecStart = ''
 | 
			
		||||
          -${pkgs.podman}/bin/podman secret create --env PCCS_CONFIG PCCS_CONFIG
 | 
			
		||||
        '';
 | 
			
		||||
        RemainAfterExit = true;
 | 
			
		||||
        serviceConfig = {
 | 
			
		||||
          EnvironmentFile = cfg.secret;
 | 
			
		||||
          ExecStart = ''
 | 
			
		||||
            -${pkgs.podman}/bin/podman secret create --env PCCS_CONFIG PCCS_CONFIG
 | 
			
		||||
          '';
 | 
			
		||||
          RemainAfterExit = true;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.metacfg.tools.direnv;
 | 
			
		||||
let cfg = config.metacfg.tools.direnv;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.metacfg.tools.direnv = with types; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ options, config, pkgs, lib, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +12,8 @@ in
 | 
			
		|||
    enable = mkBoolOpt false "Whether or not to install and configure git.";
 | 
			
		||||
    userName = mkOpt types.str user.fullName "The name to configure git with.";
 | 
			
		||||
    userEmail = mkOpt types.str user.email "The email to configure git with.";
 | 
			
		||||
    signingKey = mkOpt types.str "9762169A1B35EA68" "The key ID to sign commits with.";
 | 
			
		||||
    signingKey =
 | 
			
		||||
      mkOpt types.str "9762169A1B35EA68" "The key ID to sign commits with.";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
| 
						 | 
				
			
			@ -34,18 +29,10 @@ in
 | 
			
		|||
          signByDefault = mkIf gpg.enable true;
 | 
			
		||||
        };
 | 
			
		||||
        extraConfig = {
 | 
			
		||||
          init = {
 | 
			
		||||
            defaultBranch = "main";
 | 
			
		||||
          };
 | 
			
		||||
          pull = {
 | 
			
		||||
            rebase = true;
 | 
			
		||||
          };
 | 
			
		||||
          push = {
 | 
			
		||||
            autoSetupRemote = true;
 | 
			
		||||
          };
 | 
			
		||||
          core = {
 | 
			
		||||
            whitespace = "trailing-space,space-before-tab";
 | 
			
		||||
          };
 | 
			
		||||
          init = { defaultBranch = "main"; };
 | 
			
		||||
          pull = { rebase = true; };
 | 
			
		||||
          push = { autoSetupRemote = true; };
 | 
			
		||||
          core = { whitespace = "trailing-space,space-before-tab"; };
 | 
			
		||||
          safe = {
 | 
			
		||||
            directory = "${user.home}/git";
 | 
			
		||||
          };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
  options,
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
{ options
 | 
			
		||||
, config
 | 
			
		||||
, pkgs
 | 
			
		||||
, lib
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
let
 | 
			
		||||
with lib.metacfg; let
 | 
			
		||||
  cfg = config.metacfg.user;
 | 
			
		||||
  defaultIconFileName = "profile.jpg";
 | 
			
		||||
  defaultIcon = pkgs.stdenvNoCC.mkDerivation {
 | 
			
		||||
| 
						 | 
				
			
			@ -20,17 +18,11 @@ let
 | 
			
		|||
      cp $src $out
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    passthru = {
 | 
			
		||||
      fileName = defaultIconFileName;
 | 
			
		||||
    };
 | 
			
		||||
    passthru = { fileName = defaultIconFileName; };
 | 
			
		||||
  };
 | 
			
		||||
  propagatedIcon =
 | 
			
		||||
    pkgs.runCommandNoCC "propagated-icon"
 | 
			
		||||
      {
 | 
			
		||||
        passthru = {
 | 
			
		||||
          fileName = cfg.icon.fileName;
 | 
			
		||||
        };
 | 
			
		||||
      }
 | 
			
		||||
      { passthru = { fileName = cfg.icon.fileName; }; }
 | 
			
		||||
      ''
 | 
			
		||||
        local target="$out/share/metacfg-icons/user/${cfg.name}"
 | 
			
		||||
        mkdir -p "$target"
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +38,9 @@ in
 | 
			
		|||
    initialPassword =
 | 
			
		||||
      mkOpt str "password"
 | 
			
		||||
        "The initial password to use when the user is first created.";
 | 
			
		||||
    icon = mkOpt (nullOr package) defaultIcon "The profile picture to use for the user.";
 | 
			
		||||
    icon =
 | 
			
		||||
      mkOpt (nullOr package) defaultIcon
 | 
			
		||||
        "The profile picture to use for the user.";
 | 
			
		||||
    prompt-init = mkBoolOpt true "Whether or not to show an initial message when opening a new shell.";
 | 
			
		||||
    extraGroups = mkOpt (listOf str) [ ] "Groups for the user to be assigned.";
 | 
			
		||||
    sshKeys = mkOpt (listOf str) [
 | 
			
		||||
| 
						 | 
				
			
			@ -55,11 +49,14 @@ in
 | 
			
		|||
      "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAYbUTKpy4QR3s944/hjJ1UK05asFEs/SmWeUbtS0cdA660sT4xHnRfals73FicOoz+uIucJCwn/SCM804j+wtM="
 | 
			
		||||
      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNsmP15vH8BVKo7bdvIiiEjiQboPGcRPqJK0+bH4jKD harald@lenovo.fritz.box"
 | 
			
		||||
    ] "ssh keys";
 | 
			
		||||
    extraOptions = mkOpt attrs { } (mdDoc "Extra options passed to `users.users.<name>`.");
 | 
			
		||||
    extraOptions =
 | 
			
		||||
      mkOpt attrs { }
 | 
			
		||||
        (mdDoc "Extra options passed to `users.users.<name>`.");
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = {
 | 
			
		||||
    environment.systemPackages = with pkgs; [ ];
 | 
			
		||||
    environment.systemPackages = with pkgs; [
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    metacfg.home = {
 | 
			
		||||
      file = {
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +68,10 @@ in
 | 
			
		|||
        "Videos/.keep".text = "";
 | 
			
		||||
        "work/.keep".text = "";
 | 
			
		||||
        ".face".source = cfg.icon;
 | 
			
		||||
        "Pictures/${cfg.icon.fileName or (builtins.baseNameOf cfg.icon)}".source = cfg.icon;
 | 
			
		||||
        "Pictures/${
 | 
			
		||||
          cfg.icon.fileName or (builtins.baseNameOf cfg.icon)
 | 
			
		||||
        }".source =
 | 
			
		||||
          cfg.icon;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      extraOptions.programs.bash.initExtra = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -85,25 +85,27 @@ in
 | 
			
		|||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    users.users.${cfg.name} = {
 | 
			
		||||
      isNormalUser = true;
 | 
			
		||||
    users.users.${cfg.name} =
 | 
			
		||||
      {
 | 
			
		||||
        isNormalUser = true;
 | 
			
		||||
 | 
			
		||||
      # inherit (cfg) name initialPassword;
 | 
			
		||||
        # inherit (cfg) name initialPassword;
 | 
			
		||||
 | 
			
		||||
      openssh.authorizedKeys.keys = cfg.sshKeys;
 | 
			
		||||
      home = "/home/${cfg.name}";
 | 
			
		||||
      group = "users";
 | 
			
		||||
        openssh.authorizedKeys.keys = cfg.sshKeys;
 | 
			
		||||
        home = "/home/${cfg.name}";
 | 
			
		||||
        group = "users";
 | 
			
		||||
 | 
			
		||||
      shell = pkgs.bash;
 | 
			
		||||
        shell = pkgs.bash;
 | 
			
		||||
 | 
			
		||||
      # Arbitrary user ID to use for the user. Since I only
 | 
			
		||||
      # have a single user on my machines this won't ever collide.
 | 
			
		||||
      # However, if you add multiple users you'll need to change this
 | 
			
		||||
      # so each user has their own unique uid (or leave it out for the
 | 
			
		||||
      # system to select).
 | 
			
		||||
      uid = 1000;
 | 
			
		||||
        # Arbitrary user ID to use for the user. Since I only
 | 
			
		||||
        # have a single user on my machines this won't ever collide.
 | 
			
		||||
        # However, if you add multiple users you'll need to change this
 | 
			
		||||
        # so each user has their own unique uid (or leave it out for the
 | 
			
		||||
        # system to select).
 | 
			
		||||
        uid = 1000;
 | 
			
		||||
 | 
			
		||||
      extraGroups = [ "wheel" ] ++ cfg.extraGroups;
 | 
			
		||||
    } // cfg.extraOptions;
 | 
			
		||||
        extraGroups = [ "wheel" ] ++ cfg.extraGroups;
 | 
			
		||||
      }
 | 
			
		||||
      // cfg.extraOptions;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,5 @@
 | 
			
		|||
{ channels, ... }: final: prev: { inherit (channels.unstable) jetbrains-toolbox ollama; }
 | 
			
		||||
{ channels, ... }:
 | 
			
		||||
final: prev:
 | 
			
		||||
{
 | 
			
		||||
  inherit (channels.unstable) jetbrains-toolbox;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,5 @@
 | 
			
		|||
{ channels, ... }: final: prev: { inherit (channels.nixpkgs.nixsgx) sgx-psw; }
 | 
			
		||||
{ channels, ... }:
 | 
			
		||||
final: prev:
 | 
			
		||||
{
 | 
			
		||||
  inherit (channels.nixpkgs.nixsgx) sgx-psw;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,17 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  stdenv,
 | 
			
		||||
  fetchurl,
 | 
			
		||||
  makeWrapper,
 | 
			
		||||
  cups,
 | 
			
		||||
  dpkg,
 | 
			
		||||
  a2ps,
 | 
			
		||||
  ghostscript,
 | 
			
		||||
  gnugrep,
 | 
			
		||||
  gnused,
 | 
			
		||||
  coreutils,
 | 
			
		||||
  file,
 | 
			
		||||
  perl,
 | 
			
		||||
  which,
 | 
			
		||||
{ lib
 | 
			
		||||
, stdenv
 | 
			
		||||
, fetchurl
 | 
			
		||||
, makeWrapper
 | 
			
		||||
, cups
 | 
			
		||||
, dpkg
 | 
			
		||||
, a2ps
 | 
			
		||||
, ghostscript
 | 
			
		||||
, gnugrep
 | 
			
		||||
, gnused
 | 
			
		||||
, coreutils
 | 
			
		||||
, file
 | 
			
		||||
, perl
 | 
			
		||||
, which
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
| 
						 | 
				
			
			@ -28,12 +27,7 @@ stdenv.mkDerivation rec {
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [ makeWrapper ];
 | 
			
		||||
  buildInputs = [
 | 
			
		||||
    cups
 | 
			
		||||
    ghostscript
 | 
			
		||||
    dpkg
 | 
			
		||||
    a2ps
 | 
			
		||||
  ];
 | 
			
		||||
  buildInputs = [ cups ghostscript dpkg a2ps ];
 | 
			
		||||
 | 
			
		||||
  dontUnpack = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,14 +55,9 @@ stdenv.mkDerivation rec {
 | 
			
		|||
    ; do
 | 
			
		||||
      #substituteInPlace $f \
 | 
			
		||||
      wrapProgram $f \
 | 
			
		||||
        --prefix PATH : ${
 | 
			
		||||
          lib.makeBinPath [
 | 
			
		||||
            coreutils
 | 
			
		||||
            ghostscript
 | 
			
		||||
            gnugrep
 | 
			
		||||
            gnused
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
        --prefix PATH : ${lib.makeBinPath [
 | 
			
		||||
          coreutils ghostscript gnugrep gnused
 | 
			
		||||
        ]}
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    mkdir -p $out/lib/cups/filter/
 | 
			
		||||
| 
						 | 
				
			
			@ -78,17 +67,7 @@ stdenv.mkDerivation rec {
 | 
			
		|||
    ln -s $out/opt/brother/Printers/DCPL2530DW/cupswrapper/brother-DCPL2530DW-cups-en.ppd $out/share/cups/model/
 | 
			
		||||
 | 
			
		||||
    wrapProgram $out/opt/brother/Printers/DCPL2530DW/lpd/lpdfilter \
 | 
			
		||||
      --prefix PATH ":" ${
 | 
			
		||||
        lib.makeBinPath [
 | 
			
		||||
          ghostscript
 | 
			
		||||
          a2ps
 | 
			
		||||
          file
 | 
			
		||||
          gnused
 | 
			
		||||
          gnugrep
 | 
			
		||||
          coreutils
 | 
			
		||||
          which
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
      --prefix PATH ":" ${ lib.makeBinPath [ ghostscript a2ps file gnused gnugrep coreutils which ] }
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  meta = with lib; {
 | 
			
		||||
| 
						 | 
				
			
			@ -100,3 +79,4 @@ stdenv.mkDerivation rec {
 | 
			
		|||
    downloadPage = "https://www.brother.de/support/dcp-l2530dw/downloads";
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  writeText,
 | 
			
		||||
  writeShellApplication,
 | 
			
		||||
  substituteAll,
 | 
			
		||||
  gum,
 | 
			
		||||
  inputs,
 | 
			
		||||
  hosts ? { },
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, writeText
 | 
			
		||||
, writeShellApplication
 | 
			
		||||
, substituteAll
 | 
			
		||||
, gum
 | 
			
		||||
, inputs
 | 
			
		||||
, hosts ? { }
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +14,9 @@ let
 | 
			
		|||
 | 
			
		||||
  substitute = args: builtins.readFile (substituteAll args);
 | 
			
		||||
 | 
			
		||||
  formatted-hosts = mapAttrsToList (name: host: "${name},${host.pkgs.system}") hosts;
 | 
			
		||||
  formatted-hosts = mapAttrsToList
 | 
			
		||||
    (name: host: "${name},${host.pkgs.system}")
 | 
			
		||||
    hosts;
 | 
			
		||||
 | 
			
		||||
  hosts-csv = writeText "hosts.csv" ''
 | 
			
		||||
    Name,System
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +35,9 @@ let
 | 
			
		|||
 | 
			
		||||
    checkPhase = "";
 | 
			
		||||
 | 
			
		||||
    runtimeInputs = [ gum ];
 | 
			
		||||
    runtimeInputs = [
 | 
			
		||||
      gum
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  new-meta = with lib; {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  gitHostCommitUrl ? "https://git.hoyer.xyz/harald/nixcfg/commit",
 | 
			
		||||
  ...
 | 
			
		||||
{ pkgs
 | 
			
		||||
, lib
 | 
			
		||||
, gitHostCommitUrl ? "https://git.hoyer.xyz/harald/nixcfg/commit"
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
| 
						 | 
				
			
			@ -14,60 +13,61 @@ let
 | 
			
		|||
    maintainers = with maintainers; [ jakehamilton ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  package = pkgs.writeShellScriptBin "nixos-revision" ''
 | 
			
		||||
    HAS_HELP=false
 | 
			
		||||
    HAS_OPEN=false
 | 
			
		||||
  package =
 | 
			
		||||
    pkgs.writeShellScriptBin "nixos-revision" ''
 | 
			
		||||
      HAS_HELP=false
 | 
			
		||||
      HAS_OPEN=false
 | 
			
		||||
 | 
			
		||||
    while [[ $# -gt 0 ]]; do
 | 
			
		||||
    	case $1 in
 | 
			
		||||
    		-h|--help)
 | 
			
		||||
    			HAS_HELP=true
 | 
			
		||||
    			shift
 | 
			
		||||
    			;;
 | 
			
		||||
    		-o|--open)
 | 
			
		||||
    			HAS_OPEN=true
 | 
			
		||||
    			shift
 | 
			
		||||
    			;;
 | 
			
		||||
    		*)
 | 
			
		||||
    			shift
 | 
			
		||||
    			;;
 | 
			
		||||
    	esac
 | 
			
		||||
    done
 | 
			
		||||
      while [[ $# -gt 0 ]]; do
 | 
			
		||||
      	case $1 in
 | 
			
		||||
      		-h|--help)
 | 
			
		||||
      			HAS_HELP=true
 | 
			
		||||
      			shift
 | 
			
		||||
      			;;
 | 
			
		||||
      		-o|--open)
 | 
			
		||||
      			HAS_OPEN=true
 | 
			
		||||
      			shift
 | 
			
		||||
      			;;
 | 
			
		||||
      		*)
 | 
			
		||||
      			shift
 | 
			
		||||
      			;;
 | 
			
		||||
      	esac
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
    if [ $HAS_HELP == true ]; then
 | 
			
		||||
    	HELP_MSG="
 | 
			
		||||
    nixos-revision
 | 
			
		||||
      if [ $HAS_HELP == true ]; then
 | 
			
		||||
      	HELP_MSG="
 | 
			
		||||
      nixos-revision
 | 
			
		||||
 | 
			
		||||
    USAGE
 | 
			
		||||
      USAGE
 | 
			
		||||
 | 
			
		||||
      nixos-revision [options]
 | 
			
		||||
        nixos-revision [options]
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
      OPTIONS
 | 
			
		||||
 | 
			
		||||
      -h, --help              Show this help message
 | 
			
		||||
      -o, --open              Open the revision on GitHub
 | 
			
		||||
        -h, --help              Show this help message
 | 
			
		||||
        -o, --open              Open the revision on GitHub
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
      EXAMPLES
 | 
			
		||||
 | 
			
		||||
      $ # Print the current revision
 | 
			
		||||
      $ nixos-revision
 | 
			
		||||
        $ # Print the current revision
 | 
			
		||||
        $ nixos-revision
 | 
			
		||||
 | 
			
		||||
      $ # Open the current revision on GitHub
 | 
			
		||||
      $ nixos-revision --open
 | 
			
		||||
    "
 | 
			
		||||
    	echo "$HELP_MSG"
 | 
			
		||||
      exit 0
 | 
			
		||||
    fi
 | 
			
		||||
        $ # Open the current revision on GitHub
 | 
			
		||||
        $ nixos-revision --open
 | 
			
		||||
      "
 | 
			
		||||
      	echo "$HELP_MSG"
 | 
			
		||||
        exit 0
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
    REVISION=$(nixos-version --json | ${pkgs.jq}/bin/jq -r .configurationRevision)
 | 
			
		||||
      REVISION=$(nixos-version --json | ${pkgs.jq}/bin/jq -r .configurationRevision)
 | 
			
		||||
 | 
			
		||||
    if [ $HAS_OPEN == true ]; then
 | 
			
		||||
      GITHUB_URL="${gitHostCommitUrl}/$REVISION"
 | 
			
		||||
      echo "Opening URL: $GITHUB_URL"
 | 
			
		||||
      ${pkgs.xdg-utils}/bin/xdg-open $GITHUB_URL
 | 
			
		||||
    else
 | 
			
		||||
      echo $REVISION
 | 
			
		||||
    fi
 | 
			
		||||
  '';
 | 
			
		||||
      if [ $HAS_OPEN == true ]; then
 | 
			
		||||
        GITHUB_URL="${gitHostCommitUrl}/$REVISION"
 | 
			
		||||
        echo "Opening URL: $GITHUB_URL"
 | 
			
		||||
        ${pkgs.xdg-utils}/bin/xdg-open $GITHUB_URL
 | 
			
		||||
      else
 | 
			
		||||
        echo $REVISION
 | 
			
		||||
      fi
 | 
			
		||||
    '';
 | 
			
		||||
in
 | 
			
		||||
override-meta new-meta package
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  stdenv,
 | 
			
		||||
  rustPlatform,
 | 
			
		||||
  fetchFromGitHub,
 | 
			
		||||
  ...
 | 
			
		||||
{ lib
 | 
			
		||||
, stdenv
 | 
			
		||||
, rustPlatform
 | 
			
		||||
, fetchFromGitHub
 | 
			
		||||
, ...
 | 
			
		||||
}:
 | 
			
		||||
rustPlatform.buildRustPackage rec {
 | 
			
		||||
  pname = "rot8000";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,9 @@ with lib.metacfg;
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  environment.systemPath = [ "/usr/local/Homebrew/bin" ];
 | 
			
		||||
  environment.systemPath = [
 | 
			
		||||
    "/usr/local/Homebrew/bin"
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  users.users.harald.shell = pkgs.fish;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  sops.secrets.internetbs = {
 | 
			
		||||
    sopsFile = ../../../.secrets/hetzner/internetbs.yaml; # bring your own password file
 | 
			
		||||
| 
						 | 
				
			
			@ -18,19 +13,27 @@
 | 
			
		|||
    };
 | 
			
		||||
    certs = {
 | 
			
		||||
      "surfsite.org" = {
 | 
			
		||||
        extraDomainNames = [ "*.surfsite.org" ];
 | 
			
		||||
        extraDomainNames = [
 | 
			
		||||
          "*.surfsite.org"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      "hartwin-hoyer.de" = {
 | 
			
		||||
        extraDomainNames = [ "*.hartwin-hoyer.de" ];
 | 
			
		||||
        extraDomainNames = [
 | 
			
		||||
          "*.hartwin-hoyer.de"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      "herward-hoyer.de" = {
 | 
			
		||||
        extraDomainNames = [ "*.herward-hoyer.de" ];
 | 
			
		||||
        extraDomainNames = [
 | 
			
		||||
          "*.herward-hoyer.de"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      "varlink.org" = {
 | 
			
		||||
        extraDomainNames = [ "*.varlink.org" ];
 | 
			
		||||
        extraDomainNames = [
 | 
			
		||||
          "*.varlink.org"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      "meike-hoyer.de" = { };
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +71,9 @@
 | 
			
		|||
      };
 | 
			
		||||
 | 
			
		||||
      "harald-hoyer.de" = {
 | 
			
		||||
        extraDomainNames = [ "*.harald-hoyer.de" ];
 | 
			
		||||
        extraDomainNames = [
 | 
			
		||||
          "*.harald-hoyer.de"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
    shell = pkgs.bash;
 | 
			
		||||
    isNormalUser = true;
 | 
			
		||||
    openssh.authorizedKeys.keys = [
 | 
			
		||||
      ''restrict,command="/run/wrappers/bin/rrsync -ro /" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQGdtB6BFdXN+cRepkzWhbG5KRIM5nXmHiw1K+CEhGihwWsNVKGgU/q4rePK6PVNflTIoHUfL30jkA7H8VpSzu0XOa97Tqf+sF9VQOFrMjpf2rOWv38nc2GnKpnUu68c17KRZ+i8cnPZH0VUqRzaY/1IPMFH3OYO4qHJAEN5oAsyMFI9pbqFLqRnwNALjxf8fUvR/XB88zt3P34vFFer15FtLr4dlIzoEFGdUSOErmGJGmDzTptMqi/t0kn2AgaBKzMxwGTDUj6adU6KKBERj4ii3ekOrPwcNjsws3Mtlm5p8ycUkwUFoIiXukF6XRzCRSWMbZOgSnu2TfC6jRRrdbMNWn4QGF/jdBvvKcBoD4sChzpG6aF4m+7ue0QuHES7Kd2Rwnq0jbesGuBnRciDN+jssGvxZKX7XEialuXiaTQ4jPUA4zgWq474CR6ksuxpUDlKpH+leWPLtuKlhEZZnJHCMhz8Ewk/ZwiNSbLO97cwJciBM71orGWpFxHciT1QE= root@sgx''
 | 
			
		||||
      "restrict,command=\"/run/wrappers/bin/rrsync -ro /\" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQGdtB6BFdXN+cRepkzWhbG5KRIM5nXmHiw1K+CEhGihwWsNVKGgU/q4rePK6PVNflTIoHUfL30jkA7H8VpSzu0XOa97Tqf+sF9VQOFrMjpf2rOWv38nc2GnKpnUu68c17KRZ+i8cnPZH0VUqRzaY/1IPMFH3OYO4qHJAEN5oAsyMFI9pbqFLqRnwNALjxf8fUvR/XB88zt3P34vFFer15FtLr4dlIzoEFGdUSOErmGJGmDzTptMqi/t0kn2AgaBKzMxwGTDUj6adU6KKBERj4ii3ekOrPwcNjsws3Mtlm5p8ycUkwUFoIiXukF6XRzCRSWMbZOgSnu2TfC6jRRrdbMNWn4QGF/jdBvvKcBoD4sChzpG6aF4m+7ue0QuHES7Kd2Rwnq0jbesGuBnRciDN+jssGvxZKX7XEialuXiaTQ4jPUA4zgWq474CR6ksuxpUDlKpH+leWPLtuKlhEZZnJHCMhz8Ewk/ZwiNSbLO97cwJciBM71orGWpFxHciT1QE= root@sgx"
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  sops.secrets."coturn/static-auth-secret" = {
 | 
			
		||||
    sopsFile = ../../../.secrets/hetzner/coturn.yaml; # bring your own password file
 | 
			
		||||
| 
						 | 
				
			
			@ -13,30 +8,20 @@
 | 
			
		|||
 | 
			
		||||
  networking.firewall =
 | 
			
		||||
    let
 | 
			
		||||
      range = with config.services.coturn; [
 | 
			
		||||
        {
 | 
			
		||||
          from = min-port;
 | 
			
		||||
          to = max-port;
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
      range = with config.services.coturn; [{
 | 
			
		||||
        from = min-port;
 | 
			
		||||
        to = max-port;
 | 
			
		||||
      }];
 | 
			
		||||
    in
 | 
			
		||||
    {
 | 
			
		||||
      allowedUDPPortRanges = range;
 | 
			
		||||
      allowedTCPPorts = [
 | 
			
		||||
        3478
 | 
			
		||||
        3479
 | 
			
		||||
        5349
 | 
			
		||||
      ];
 | 
			
		||||
      allowedUDPPorts = [
 | 
			
		||||
        3478
 | 
			
		||||
        3479
 | 
			
		||||
        5349
 | 
			
		||||
      ];
 | 
			
		||||
      allowedTCPPorts = [ 3478 3479 5349 ];
 | 
			
		||||
      allowedUDPPorts = [ 3478 3479 5349 ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  # get a certificate
 | 
			
		||||
  security.acme.certs.${config.services.coturn.realm} = {
 | 
			
		||||
    # insert here the right configuration to obtain a certificate
 | 
			
		||||
    /* insert here the right configuration to obtain a certificate */
 | 
			
		||||
    postRun = "systemctl restart coturn.service";
 | 
			
		||||
    group = "turnserver";
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  sops.secrets."postgres/gitea_dbpass" = {
 | 
			
		||||
    sopsFile = ../../../.secrets/hetzner/postgres.yaml; # bring your own password file
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,12 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ lib, pkgs, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 | 
			
		||||
  imports = [
 | 
			
		||||
    (modulesPath + "/installer/scan/not-detected.nix")
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  boot.kernelPackages = lib.mkForce pkgs.linuxPackages;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,17 +28,15 @@
 | 
			
		|||
    "rng_core"
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  boot.swraid.enable = true;
 | 
			
		||||
  boot.swraid.mdadmConf = ''
 | 
			
		||||
    MAILADDR admin@hoyer.xyz
 | 
			
		||||
  '';
 | 
			
		||||
  disko.devices = import ./server-raid.nix {
 | 
			
		||||
    inherit lib;
 | 
			
		||||
    disks = [
 | 
			
		||||
      "/dev/sda"
 | 
			
		||||
      "/dev/sdb"
 | 
			
		||||
    ];
 | 
			
		||||
    disks = [ "/dev/sda" "/dev/sdb" ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  swapDevices = [ { device = "/swapfile"; } ];
 | 
			
		||||
  swapDevices = [{ device = "/swapfile"; }];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,9 @@
 | 
			
		|||
        "/home/hartwin/kicker/.htpasswd:/app/public/.htpasswd"
 | 
			
		||||
        "/home/hartwin/kicker/live.db:/app/db/data/current.db"
 | 
			
		||||
      ];
 | 
			
		||||
      extraOptions = [ "--pull=always" ];
 | 
			
		||||
      extraOptions = [
 | 
			
		||||
        "--pull=always"
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  # email addresses git smudged
 | 
			
		||||
  mailserver = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,7 @@
 | 
			
		|||
  services.resolved.extraConfig = "ReadEtcHosts=no";
 | 
			
		||||
  services.nscd.enableNsncd = false;
 | 
			
		||||
 | 
			
		||||
  networking.firewall.allowedTCPPorts = [
 | 
			
		||||
    80
 | 
			
		||||
    443
 | 
			
		||||
  ];
 | 
			
		||||
  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
			
		||||
  networking.firewall.allowPing = true;
 | 
			
		||||
 | 
			
		||||
  networking.hostName = "mx"; # Define your hostname.
 | 
			
		||||
| 
						 | 
				
			
			@ -29,26 +26,20 @@
 | 
			
		|||
 | 
			
		||||
  networking.interfaces.enp0s31f6 = {
 | 
			
		||||
    ipv6 = {
 | 
			
		||||
      addresses = [
 | 
			
		||||
        {
 | 
			
		||||
          address = "2a01:4f9:2b:2e3::2"; # Your IPv6 here
 | 
			
		||||
          prefixLength = 64;
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
      addresses = [{
 | 
			
		||||
        address = "2a01:4f9:2b:2e3::2"; # Your IPv6 here
 | 
			
		||||
        prefixLength = 64;
 | 
			
		||||
      }];
 | 
			
		||||
      # Default IPv6 route
 | 
			
		||||
      routes = [
 | 
			
		||||
        {
 | 
			
		||||
          address = "::";
 | 
			
		||||
          prefixLength = 0;
 | 
			
		||||
          via = "fe80::1";
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
      routes = [{
 | 
			
		||||
        address = "::";
 | 
			
		||||
        prefixLength = 0;
 | 
			
		||||
        via = "fe80::1";
 | 
			
		||||
      }];
 | 
			
		||||
    };
 | 
			
		||||
    ipv4.addresses = [
 | 
			
		||||
      {
 | 
			
		||||
        address = "95.216.66.178";
 | 
			
		||||
        prefixLength = 26;
 | 
			
		||||
      }
 | 
			
		||||
    ];
 | 
			
		||||
    ipv4.addresses = [{
 | 
			
		||||
      address = "95.216.66.178";
 | 
			
		||||
      prefixLength = 26;
 | 
			
		||||
    }];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,9 @@
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  services.postgresql = {
 | 
			
		||||
    ensureDatabases = [ "nextcloud" ];
 | 
			
		||||
    ensureDatabases = [
 | 
			
		||||
      "nextcloud"
 | 
			
		||||
    ];
 | 
			
		||||
    ensureUsers = [
 | 
			
		||||
      {
 | 
			
		||||
        name = "nextcloud";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@
 | 
			
		|||
        root = "/var/www/hoyer.xyz/html";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      "hoyer.world" = {
 | 
			
		||||
        enableACME = false;
 | 
			
		||||
        useACMEHost = "hoyer.world";
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +47,9 @@
 | 
			
		|||
 | 
			
		||||
      "hoyer.xyz" = {
 | 
			
		||||
        #      serverName = "hoyer.xyz";
 | 
			
		||||
        serverAliases = [ "www.hoyer.xyz" ];
 | 
			
		||||
        serverAliases = [
 | 
			
		||||
          "www.hoyer.xyz"
 | 
			
		||||
        ];
 | 
			
		||||
        useACMEHost = "hoyer.xyz";
 | 
			
		||||
        enableACME = false;
 | 
			
		||||
        forceSSL = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -105,13 +108,17 @@
 | 
			
		|||
      };
 | 
			
		||||
 | 
			
		||||
      "harald-hoyer.de" = {
 | 
			
		||||
        serverAliases = [ "www.harald-hoyer.de" ];
 | 
			
		||||
        serverAliases = [
 | 
			
		||||
          "www.harald-hoyer.de"
 | 
			
		||||
        ];
 | 
			
		||||
        useACMEHost = "harald-hoyer.de";
 | 
			
		||||
        globalRedirect = "harald.hoyer.xyz";
 | 
			
		||||
        forceSSL = true;
 | 
			
		||||
      };
 | 
			
		||||
      "harald.hoyer.xyz" = {
 | 
			
		||||
        serverAliases = [ "www.harald.hoyer.xyz" ];
 | 
			
		||||
        serverAliases = [
 | 
			
		||||
          "www.harald.hoyer.xyz"
 | 
			
		||||
        ];
 | 
			
		||||
        useACMEHost = "hoyer.xyz";
 | 
			
		||||
        root = "/var/www/harald.hoyer.xyz/html/";
 | 
			
		||||
        extraConfig = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +141,9 @@
 | 
			
		|||
      };
 | 
			
		||||
 | 
			
		||||
      "hartwin-hoyer.de" = {
 | 
			
		||||
        serverAliases = [ "www.hartwin-hoyer.de" ];
 | 
			
		||||
        serverAliases = [
 | 
			
		||||
          "www.hartwin-hoyer.de"
 | 
			
		||||
        ];
 | 
			
		||||
        useACMEHost = "hartwin-hoyer.de";
 | 
			
		||||
        globalRedirect = "hartwin.hoyer.xyz";
 | 
			
		||||
        forceSSL = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  services.postgresql = {
 | 
			
		||||
    package = pkgs.postgresql_14;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,12 +10,10 @@ let
 | 
			
		|||
  '';
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  services.rspamd.workers.controller.bindSockets = [
 | 
			
		||||
    {
 | 
			
		||||
      socket = "/run/rspamd/worker-controller.sock";
 | 
			
		||||
      mode = "0660";
 | 
			
		||||
    }
 | 
			
		||||
  ];
 | 
			
		||||
  services.rspamd.workers.controller.bindSockets = [{
 | 
			
		||||
    socket = "/run/rspamd/worker-controller.sock";
 | 
			
		||||
    mode = "0660";
 | 
			
		||||
  }];
 | 
			
		||||
  services.rspamd.locals = {
 | 
			
		||||
    "settings.conf".text = ''
 | 
			
		||||
      bogenschiessen {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  disks ? [
 | 
			
		||||
    "/dev/sda"
 | 
			
		||||
    "/dev/sdb"
 | 
			
		||||
  ],
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{
 | 
			
		||||
{ disks ? [ "/dev/sda" "/dev/sdb" ], ... }: {
 | 
			
		||||
  disk = {
 | 
			
		||||
    one = {
 | 
			
		||||
      type = "disk";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,18 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  services.postgresql = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    ensureDatabases = [ "attic" ];
 | 
			
		||||
    ensureUsers = [ { name = "atticd"; } ];
 | 
			
		||||
    ensureUsers = [{ name = "atticd"; }];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  systemd.services.postgresql.postStart = lib.mkAfter ''
 | 
			
		||||
    $PSQL -tAc 'ALTER DATABASE "attic" OWNER TO "atticd"'
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  environment.systemPackages = with pkgs; [ attic-client ];
 | 
			
		||||
  environment.systemPackages = with pkgs; [
 | 
			
		||||
    attic-client
 | 
			
		||||
  ];
 | 
			
		||||
  services.atticd = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,28 +1,17 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ config, lib, pkgs, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./disko.nix
 | 
			
		||||
    (modulesPath + "/profiles/qemu-guest.nix")
 | 
			
		||||
  ];
 | 
			
		||||
  imports =
 | 
			
		||||
    [
 | 
			
		||||
      ./disko.nix
 | 
			
		||||
      (modulesPath + "/profiles/qemu-guest.nix")
 | 
			
		||||
    ];
 | 
			
		||||
  disko.devices.disk.main.device = "/dev/vda";
 | 
			
		||||
 | 
			
		||||
  boot.initrd.availableKernelModules = [
 | 
			
		||||
    "ahci"
 | 
			
		||||
    "xhci_pci"
 | 
			
		||||
    "virtio_pci"
 | 
			
		||||
    "sr_mod"
 | 
			
		||||
    "virtio_blk"
 | 
			
		||||
  ];
 | 
			
		||||
  boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ];
 | 
			
		||||
  boot.initrd.kernelModules = [ ];
 | 
			
		||||
  boot.kernelModules = [ "kvm-intel" ];
 | 
			
		||||
  boot.extraModulePackages = [ ];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,10 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
with lib;
 | 
			
		||||
with lib.metacfg;
 | 
			
		||||
{
 | 
			
		||||
  imports = [ ./hardware-configuration.nix ];
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./hardware-configuration.nix
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  boot.kernel.sysctl."net.ipv4.conf.all.route_localnet" = 1;
 | 
			
		||||
  boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest;
 | 
			
		||||
| 
						 | 
				
			
			@ -23,10 +20,7 @@ with lib.metacfg;
 | 
			
		|||
    nix.enable = true;
 | 
			
		||||
    aesmd_dcap.enable = true;
 | 
			
		||||
    podman.enable = true;
 | 
			
		||||
    user.extraGroups = [
 | 
			
		||||
      "docker"
 | 
			
		||||
      "sgx"
 | 
			
		||||
    ];
 | 
			
		||||
    user.extraGroups = [ "docker" "sgx" ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  environment.etc."sgx_default_qcnl.conf".text = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -65,18 +59,8 @@ with lib.metacfg;
 | 
			
		|||
  systemd.user.extraConfig = "DefaultLimitNOFILE=32768";
 | 
			
		||||
 | 
			
		||||
  security.pam.loginLimits = [
 | 
			
		||||
    {
 | 
			
		||||
      domain = "*";
 | 
			
		||||
      item = "nofile";
 | 
			
		||||
      type = "-";
 | 
			
		||||
      value = "32768";
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
      domain = "*";
 | 
			
		||||
      item = "memlock";
 | 
			
		||||
      type = "-";
 | 
			
		||||
      value = "32768";
 | 
			
		||||
    }
 | 
			
		||||
    { domain = "*"; item = "nofile"; type = "-"; value = "32768"; }
 | 
			
		||||
    { domain = "*"; item = "memlock"; type = "-"; value = "32768"; }
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  system.stateVersion = "23.11";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +1,30 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ config, lib, pkgs, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
 | 
			
		||||
  imports =
 | 
			
		||||
    [
 | 
			
		||||
      (modulesPath + "/profiles/qemu-guest.nix")
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
  boot.initrd.availableKernelModules = [
 | 
			
		||||
    "ahci"
 | 
			
		||||
    "xhci_pci"
 | 
			
		||||
    "virtio_pci"
 | 
			
		||||
    "sr_mod"
 | 
			
		||||
    "virtio_blk"
 | 
			
		||||
  ];
 | 
			
		||||
  boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ];
 | 
			
		||||
  boot.initrd.kernelModules = [ ];
 | 
			
		||||
  boot.kernelModules = [ "kvm-intel" ];
 | 
			
		||||
  boot.extraModulePackages = [ ];
 | 
			
		||||
 | 
			
		||||
  fileSystems."/" = {
 | 
			
		||||
    device = "/dev/disk/by-uuid/ebb90474-ddcb-484b-9663-d71863827af4";
 | 
			
		||||
    fsType = "ext4";
 | 
			
		||||
  };
 | 
			
		||||
  fileSystems."/" =
 | 
			
		||||
    {
 | 
			
		||||
      device = "/dev/disk/by-uuid/ebb90474-ddcb-484b-9663-d71863827af4";
 | 
			
		||||
      fsType = "ext4";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  fileSystems."/boot" = {
 | 
			
		||||
    device = "/dev/disk/by-uuid/941C-7B02";
 | 
			
		||||
    fsType = "vfat";
 | 
			
		||||
  };
 | 
			
		||||
  fileSystems."/boot" =
 | 
			
		||||
    {
 | 
			
		||||
      device = "/dev/disk/by-uuid/941C-7B02";
 | 
			
		||||
      fsType = "vfat";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  swapDevices = [ ];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
let
 | 
			
		||||
  backup_new_path = "/mnt/raid/backup/hoyer/new/";
 | 
			
		||||
  restic_repo = "/mnt/backup/restic-repo";
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +61,8 @@ in
 | 
			
		|||
          ".log"
 | 
			
		||||
          ".Trash"
 | 
			
		||||
        ];
 | 
			
		||||
        ignoreFile = builtins.toFile "ignore" (lib.foldl (a: b: a + "\n" + b) "" ignorePatterns);
 | 
			
		||||
        ignoreFile = builtins.toFile "ignore"
 | 
			
		||||
          (lib.foldl (a: b: a + "\n" + b) "" ignorePatterns);
 | 
			
		||||
      in
 | 
			
		||||
      [ "--exclude-file=${ignoreFile}" ];
 | 
			
		||||
    pruneOpts = [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./hardware-configuration.nix
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  services.netatalk = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,12 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, config, lib, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 | 
			
		||||
  imports = [
 | 
			
		||||
    (modulesPath + "/installer/scan/not-detected.nix")
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  boot.initrd.availableKernelModules = [
 | 
			
		||||
    "xhci_pci"
 | 
			
		||||
| 
						 | 
				
			
			@ -47,33 +43,18 @@
 | 
			
		|||
    "/mnt/raid" = {
 | 
			
		||||
      fsType = "btrfs";
 | 
			
		||||
      device = "/dev/disk/by-uuid/11727be7-bf9b-4888-8b02-d7eb1f898712";
 | 
			
		||||
      options = [
 | 
			
		||||
        "defaults"
 | 
			
		||||
        "compress=zstd"
 | 
			
		||||
        "subvol=root"
 | 
			
		||||
        "autodefrag"
 | 
			
		||||
        "noatime"
 | 
			
		||||
        "nofail"
 | 
			
		||||
        "x-systemd.device-timeout=60"
 | 
			
		||||
      ];
 | 
			
		||||
      options = [ "defaults" "compress=zstd" "subvol=root" "autodefrag" "noatime" "nofail" "x-systemd.device-timeout=60" ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    "/mnt/backup" = {
 | 
			
		||||
      fsType = "btrfs";
 | 
			
		||||
      device = "/dev/disk/by-uuid/c29e7eac-26ba-41b1-ac3e-11123476b7c5";
 | 
			
		||||
      options = [
 | 
			
		||||
        "defaults"
 | 
			
		||||
        "compress=zstd"
 | 
			
		||||
        "subvol=root"
 | 
			
		||||
        "autodefrag"
 | 
			
		||||
        "noatime"
 | 
			
		||||
        "nofail"
 | 
			
		||||
        "x-systemd.device-timeout=60"
 | 
			
		||||
      ];
 | 
			
		||||
      options = [ "defaults" "compress=zstd" "subvol=root" "autodefrag" "noatime" "nofail" "x-systemd.device-timeout=60" ];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  swapDevices = [ { device = "/dev/disk/by-uuid/72d061d7-ab18-47b9-beb1-1c465dda1be9"; } ];
 | 
			
		||||
  swapDevices =
 | 
			
		||||
    [{ device = "/dev/disk/by-uuid/72d061d7-ab18-47b9-beb1-1c465dda1be9"; }];
 | 
			
		||||
 | 
			
		||||
  environment.etc."crypttab".text = ''
 | 
			
		||||
    a16 /dev/disk/by-uuid/6f1c1b24-3c94-44be-8d1b-70db562079c1 /dev/disk/by-id/usb-Ut165_USB2FlashStorage_08050508d213e6-0:0-part1 luks,keyfile-size=256
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  config,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ pkgs, lib, config, ... }:
 | 
			
		||||
{
 | 
			
		||||
  networking.hostName = "sgx"; # Define your hostname.
 | 
			
		||||
  networking.useDHCP = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -42,14 +37,7 @@
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  networking.firewall.allowedTCPPorts = [
 | 
			
		||||
    8384
 | 
			
		||||
    22000
 | 
			
		||||
    config.services.netatalk.port
 | 
			
		||||
  ];
 | 
			
		||||
  networking.firewall.allowedUDPPorts = [
 | 
			
		||||
    22000
 | 
			
		||||
    21027
 | 
			
		||||
  ];
 | 
			
		||||
  networking.firewall.allowedTCPPorts = [ 8384 22000 config.services.netatalk.port ];
 | 
			
		||||
  networking.firewall.allowedUDPPorts = [ 22000 21027 ];
 | 
			
		||||
  networking.firewall.allowPing = true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,10 +10,7 @@
 | 
			
		|||
    podman.enable = true;
 | 
			
		||||
    secureboot.enable = true;
 | 
			
		||||
    homeprinter.enable = true;
 | 
			
		||||
    user.extraGroups = [
 | 
			
		||||
      "docker"
 | 
			
		||||
      "dialout"
 | 
			
		||||
    ];
 | 
			
		||||
    user.extraGroups = [ "docker" "dialout" ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  system.autoUpgrade = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,12 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ config, lib, pkgs, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 | 
			
		||||
  imports = [
 | 
			
		||||
    (modulesPath + "/installer/scan/not-detected.nix")
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  boot.kernelModules = [ "kvm-intel" ];
 | 
			
		||||
  boot.initrd.availableKernelModules = [
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +40,7 @@
 | 
			
		|||
  boot.extraModulePackages = [ ];
 | 
			
		||||
 | 
			
		||||
  services.btrfs.autoScrub.enable = true;
 | 
			
		||||
  swapDevices = [ { device = "/swapfile"; } ];
 | 
			
		||||
  swapDevices = [{ device = "/swapfile"; }];
 | 
			
		||||
 | 
			
		||||
  boot.initrd.luks.devices.crypted = {
 | 
			
		||||
    device = "/dev/nvme0n1p2";
 | 
			
		||||
| 
						 | 
				
			
			@ -52,12 +48,13 @@
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  fileSystems = {
 | 
			
		||||
    "/" = {
 | 
			
		||||
      device = "/dev/mapper/crypted";
 | 
			
		||||
      fsType = "btrfs";
 | 
			
		||||
      options = [ "subvol=/rootfs" ];
 | 
			
		||||
      neededForBoot = true;
 | 
			
		||||
    };
 | 
			
		||||
    "/" =
 | 
			
		||||
      {
 | 
			
		||||
        device = "/dev/mapper/crypted";
 | 
			
		||||
        fsType = "btrfs";
 | 
			
		||||
        options = [ "subvol=/rootfs" ];
 | 
			
		||||
        neededForBoot = true;
 | 
			
		||||
      };
 | 
			
		||||
    "/nix" = {
 | 
			
		||||
      device = "/dev/mapper/crypted";
 | 
			
		||||
      fsType = "btrfs";
 | 
			
		||||
| 
						 | 
				
			
			@ -75,10 +72,11 @@
 | 
			
		|||
      options = [ "subvol=/persist" ];
 | 
			
		||||
      neededForBoot = true;
 | 
			
		||||
    };
 | 
			
		||||
    "/boot" = {
 | 
			
		||||
      device = "/dev/disk/by-partlabel/disk-one-ESP";
 | 
			
		||||
      fsType = "vfat";
 | 
			
		||||
    };
 | 
			
		||||
    "/boot" =
 | 
			
		||||
      {
 | 
			
		||||
        device = "/dev/disk/by-partlabel/disk-one-ESP";
 | 
			
		||||
        fsType = "vfat";
 | 
			
		||||
      };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  console.keyMap = "de-latin1-nodeadkeys";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,10 +12,7 @@ with lib.metacfg;
 | 
			
		|||
    podman.enable = true;
 | 
			
		||||
    secureboot.enable = true;
 | 
			
		||||
    homeprinter.enable = true;
 | 
			
		||||
    user.extraGroups = [
 | 
			
		||||
      "docker"
 | 
			
		||||
      "dialout"
 | 
			
		||||
    ];
 | 
			
		||||
    user.extraGroups = [ "docker" "dialout" ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  environment.systemPackages = with pkgs; [
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +23,6 @@ with lib.metacfg;
 | 
			
		|||
    kubectx
 | 
			
		||||
    k9s
 | 
			
		||||
    attic-client
 | 
			
		||||
    ollama
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  services.resolved.enable = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -54,24 +50,9 @@ with lib.metacfg;
 | 
			
		|||
  systemd.user.extraConfig = "DefaultLimitNOFILE=32768";
 | 
			
		||||
 | 
			
		||||
  security.pam.loginLimits = [
 | 
			
		||||
    {
 | 
			
		||||
      domain = "*";
 | 
			
		||||
      item = "nofile";
 | 
			
		||||
      type = "-";
 | 
			
		||||
      value = "32768";
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
      domain = "*";
 | 
			
		||||
      item = "memlock";
 | 
			
		||||
      type = "-";
 | 
			
		||||
      value = "32768";
 | 
			
		||||
    }
 | 
			
		||||
    { domain = "*"; item = "nofile"; type = "-"; value = "32768"; }
 | 
			
		||||
    { domain = "*"; item = "memlock"; type = "-"; value = "32768"; }
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  services.ollama = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    acceleration = "rocm";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  system.stateVersion = "23.11";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,25 +1,14 @@
 | 
			
		|||
# Do not modify this file!  It was generated by ‘nixos-generate-config’
 | 
			
		||||
# and may be overwritten by future invocations.  Please make changes
 | 
			
		||||
# to /etc/nixos/configuration.nix instead.
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  modulesPath,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
{ config, lib, pkgs, modulesPath, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
 | 
			
		||||
 | 
			
		||||
  boot.initrd.availableKernelModules = [
 | 
			
		||||
    "xhci_pci"
 | 
			
		||||
    "thunderbolt"
 | 
			
		||||
    "nvme"
 | 
			
		||||
    "uas"
 | 
			
		||||
    "usbhid"
 | 
			
		||||
    "sd_mod"
 | 
			
		||||
  imports = [
 | 
			
		||||
    (modulesPath + "/installer/scan/not-detected.nix")
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "uas" "usbhid" "sd_mod" ];
 | 
			
		||||
  boot.initrd.kernelModules = [ ];
 | 
			
		||||
  boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest;
 | 
			
		||||
  boot.kernelModules = [ "kvm-intel" ];
 | 
			
		||||
| 
						 | 
				
			
			@ -35,11 +24,12 @@
 | 
			
		|||
 | 
			
		||||
  services.btrfs.autoScrub.enable = true;
 | 
			
		||||
 | 
			
		||||
  fileSystems."/" = {
 | 
			
		||||
    device = "/dev/disk/by-uuid/1106202c-c3bf-4c15-b7cd-e78749e5c955";
 | 
			
		||||
    fsType = "btrfs";
 | 
			
		||||
    options = [ "subvol=@" ];
 | 
			
		||||
  };
 | 
			
		||||
  fileSystems."/" =
 | 
			
		||||
    {
 | 
			
		||||
      device = "/dev/disk/by-uuid/1106202c-c3bf-4c15-b7cd-e78749e5c955";
 | 
			
		||||
      fsType = "btrfs";
 | 
			
		||||
      options = [ "subvol=@" ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  boot.initrd.luks.devices."luks-0e2792db-1b80-49a7-b2eb-54e4b5fc3502" = {
 | 
			
		||||
    device = "/dev/disk/by-uuid/0e2792db-1b80-49a7-b2eb-54e4b5fc3502";
 | 
			
		||||
| 
						 | 
				
			
			@ -51,12 +41,13 @@
 | 
			
		|||
    allowDiscards = true;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  fileSystems."/boot" = {
 | 
			
		||||
    device = "/dev/disk/by-uuid/13C4-A825";
 | 
			
		||||
    fsType = "vfat";
 | 
			
		||||
  };
 | 
			
		||||
  fileSystems."/boot" =
 | 
			
		||||
    {
 | 
			
		||||
      device = "/dev/disk/by-uuid/13C4-A825";
 | 
			
		||||
      fsType = "vfat";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  swapDevices = [ { device = "/dev/mapper/luks-280f2e07-e5fc-478e-b7ee-445c99bea415"; } ];
 | 
			
		||||
  swapDevices = [{ device = "/dev/mapper/luks-280f2e07-e5fc-478e-b7ee-445c99bea415"; }];
 | 
			
		||||
 | 
			
		||||
  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
 | 
			
		||||
  # (the default) this is the recommended approach. When using systemd-networkd it's
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue