all repos

dotfiles @ 0c7a96b

i use rach linux btw
25 files changed, 160 insertions(+), 256 deletions(-)
nix: i did some updates
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-03-02 13:44:49 +0200
Authored at: 2026-03-01 21:23:24 +0200
Parent: 9068778
M nix/flake.lock
···
        257
        257
             },

      
        258
        258
             "nixpkgs": {

      
        259
        259
               "locked": {

      
        260
        
        -        "lastModified": 1771903837,

      
        261
        
        -        "narHash": "sha256-sdaqdnsQCv3iifzxwB22tUwN/fSHoN7j2myFW5EIkGk=",

      
        
        260
        +        "lastModified": 1772047000,

      
        
        261
        +        "narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=",

      
        262
        262
                 "owner": "NixOS",

      
        263
        263
                 "repo": "nixpkgs",

      
        264
        
        -        "rev": "e764fc9a405871f1f6ca3d1394fb422e0a0c3951",

      
        
        264
        +        "rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",

      
        265
        265
                 "type": "github"

      
        266
        266
               },

      
        267
        267
               "original": {

      ···
        346
        346
                 "rev": "12ef7f8f63ee4a14a552ebed603802c79e4d72f8",

      
        347
        347
                 "revCount": 1678,

      
        348
        348
                 "type": "git",

      
        349
        
        -        "url": "https://tangled.org/@tangled.org/core"

      
        
        349
        +        "url": "https://tangled.org/tangled.org/core"

      
        350
        350
               },

      
        351
        351
               "original": {

      
        352
        352
                 "ref": "refs/tags/v1.11.0-alpha",

      
        353
        353
                 "type": "git",

      
        354
        
        -        "url": "https://tangled.org/@tangled.org/core"

      
        
        354
        +        "url": "https://tangled.org/tangled.org/core"

      
        355
        355
               }

      
        356
        356
             }

      
        357
        357
           },

      
M nix/flake.nix
···
        1
        1
         {

      
        2
        
        -  description = "my nix";

      
        3
        2
           inputs = {

      
        4
        3
             nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";

      
        5
        
        -    agenix = {

      
        6
        
        -      url = "github:ryantm/agenix";

      
        7
        
        -      inputs.nixpkgs.follows = "nixpkgs";

      
        8
        
        -    };

      
        9
        
        -    disko = {

      
        10
        
        -      url = "github:nix-community/disko";

      
        11
        
        -      inputs.nixpkgs.follows = "nixpkgs";

      
        12
        
        -    };

      
        13
        
        -    tangled = {

      
        14
        
        -      url = "git+https://tangled.org/@tangled.org/core?ref=refs/tags/v1.11.0-alpha";

      
        15
        
        -      inputs.nixpkgs.follows = "nixpkgs";

      
        16
        
        -    };

      
        17
        
        -    mugit = {

      
        18
        
        -      url = "github:olexsmir/mugit";

      
        19
        
        -      inputs.nixpkgs.follows = "nixpkgs";

      
        
        4
        +

      
        
        5
        +    agenix.url = "github:ryantm/agenix";

      
        
        6
        +    agenix.inputs.nixpkgs.follows = "nixpkgs";

      
        
        7
        +

      
        
        8
        +    disko.url = "github:nix-community/disko";

      
        
        9
        +    disko.inputs.nixpkgs.follows = "nixpkgs";

      
        
        10
        +

      
        
        11
        +    tangled.url = "git+https://tangled.org/tangled.org/core?ref=refs/tags/v1.11.0-alpha";

      
        
        12
        +    tangled.inputs.nixpkgs.follows = "nixpkgs";

      
        
        13
        +

      
        
        14
        +    mugit.url = "github:olexsmir/mugit";

      
        
        15
        +    mugit.inputs.nixpkgs.follows = "nixpkgs";

      
        
        16
        +  };

      
        
        17
        +  outputs = { nixpkgs, agenix, disko, ... } @ inputs: {

      
        
        18
        +    nixosConfigurations."thought" = nixpkgs.lib.nixosSystem {

      
        
        19
        +      modules = [

      
        
        20
        +        ./hosts/thought

      
        
        21
        +        agenix.nixosModules.default

      
        
        22
        +        disko.nixosModules.disko

      
        
        23
        +        inputs.tangled.nixosModules.knot

      
        
        24
        +        inputs.tangled.nixosModules.spindle

      
        
        25
        +        inputs.mugit.nixosModules.default

      
        
        26
        +        { nixpkgs.hostPlatform = "x86_64-linux"; }

      
        
        27
        +      ];

      
        20
        28
             };

      
        21
        29
           };

      
        22
        
        -

      
        23
        
        -  outputs =

      
        24
        
        -    {

      
        25
        
        -      nixpkgs,

      
        26
        
        -      agenix,

      
        27
        
        -      disko,

      
        28
        
        -      tangled,

      
        29
        
        -      mugit,

      
        30
        
        -      ...

      
        31
        
        -    }:

      
        32
        
        -    {

      
        33
        
        -      nixosConfigurations."thought" = nixpkgs.lib.nixosSystem {

      
        34
        
        -        system = "x86_64-linux";

      
        35
        
        -        modules = [

      
        36
        
        -          ./hosts/thought

      
        37
        
        -          agenix.nixosModules.default

      
        38
        
        -          disko.nixosModules.disko

      
        39
        
        -          tangled.nixosModules.knot

      
        40
        
        -          tangled.nixosModules.spindle

      
        41
        
        -          mugit.nixosModules.default

      
        42
        
        -        ];

      
        43
        
        -      };

      
        44
        
        -    };

      
        45
        30
         }

      
M nix/hosts/thought/configuration.nix
···
        1
        
        -{ pkgs, ... }:

      
        2
        
        -{

      
        
        1
        +{ ... }: {

      
        3
        2
           imports = [

      
        4
        3
             ./disko-config.nix

      
        5
        4
             ./hardware-configuration.nix

      ···
        7
        6
         

      
        8
        7
           system.stateVersion = "25.11";

      
        9
        8
         

      
        10
        
        -  swapDevices = [

      
        11
        
        -    {

      
        12
        
        -      device = "/swapfile";

      
        13
        
        -      size = 2048; # MB

      
        14
        
        -    }

      
        15
        
        -  ];

      
        16
        
        -

      
        17
        9
           boot.loader.grub = {

      
        18
        10
             efiSupport = true;

      
        19
        11
             efiInstallAsRemovable = true;

      
        20
        12
           };

      
        21
        13
         

      
        
        14
        +  swapDevices = [ {

      
        
        15
        +   device = "/swapfile";

      
        
        16
        +    size = 2048; # MB

      
        
        17
        +  } ];

      
        
        18
        +

      
        22
        19
           time.timeZone = "Europe/Kyiv";

      
        23
        20
           i18n.defaultLocale = "en_US.UTF-8";

      
        24
        
        -

      
        25
        21
           networking = {

      
        26
        
        -    hostName = "vps";

      
        27
        
        -    interfaces = { };

      
        
        22
        +    hostName = "thought";

      
        28
        23
             firewall = {

      
        29
        24
               enable = true;

      
        30
        
        -      allowedTCPPorts = [

      
        31
        
        -        80

      
        32
        
        -        443

      
        33
        
        -        2222

      
        34
        
        -      ];

      
        
        25
        +      allowedTCPPorts = [ 80 443 2222 ];

      
        35
        26
             };

      
        36
        27
           };

      
        37
        
        -

      
        38
        
        -  age.identityPaths = [ "/keys.txt" ];

      
        39
        28
         

      
        40
        29
           services = {

      
        41
        30
             caddy.enable = true;

      ···
        48
        37
               };

      
        49
        38
             };

      
        50
        39
           };

      
        51
        
        -

      
        52
        
        -  nix = {

      
        53
        
        -    gc = {

      
        54
        
        -      automatic = true;

      
        55
        
        -      dates = "weekly";

      
        56
        
        -      options = "--delete-older-than 30d";

      
        57
        
        -    };

      
        58
        
        -    settings = {

      
        59
        
        -      auto-optimise-store = true;

      
        60
        
        -      experimental-features = [

      
        61
        
        -        "nix-command"

      
        62
        
        -        "flakes"

      
        63
        
        -      ];

      
        64
        
        -    };

      
        65
        
        -  };

      
        66
        
        -

      
        67
        
        -  environment.systemPackages = with pkgs; [

      
        68
        
        -    neovim

      
        69
        
        -    git

      
        70
        
        -    htop

      
        71
        
        -  ];

      
        72
        40
         }

      
M nix/hosts/thought/default.nix
···
        1
        
        -{ ... }:

      
        2
        
        -{

      
        
        1
        +{ ... }: {

      
        3
        2
           imports = [

      
        4
        3
             ./digitalocean.nix

      
        5
        4
             ./configuration.nix

      
        6
        5
             ./hardware-configuration.nix

      
        7
        6
         

      
        8
        
        -    ../../users/q.nix

      
        9
        
        -

      
        10
        
        -    ../../modules/freshrss.nix

      
        11
        
        -    ../../modules/moviefeed.nix

      
        12
        
        -    ../../modules/mugit.nix

      
        13
        
        -    ../../modules/wireguard.nix

      
        14
        
        -    ../../modules/shortener.nix

      
        15
        
        -    ../../modules/vikunja.nix

      
        
        7
        +    ../../modules/common.nix

      
        
        8
        +    ../../modules/users/q.nix

      
        
        9
        +    ../../modules/services/freshrss.nix

      
        
        10
        +    ../../modules/services/mugit.nix

      
        
        11
        +    ../../modules/services/wireguard.nix

      
        
        12
        +    ../../modules/services/moviefeed.nix

      
        16
        13
           ];

      
        17
        14
         }

      
A nix/modules/common.nix
···
        
        1
        +{ pkgs, ... }: {

      
        
        2
        +  age.identityPaths = [ "/keys.txt" ];

      
        
        3
        +

      
        
        4
        +  nix = {

      
        
        5
        +    gc = {

      
        
        6
        +      automatic = true;

      
        
        7
        +      dates = "weekly";

      
        
        8
        +      options = "--delete-older-than 30d";

      
        
        9
        +    };

      
        
        10
        +    optimise.automatic = true;

      
        
        11
        +    settings = {

      
        
        12
        +      auto-optimise-store = true;

      
        
        13
        +      trusted-users = [ "root" "olex" "q" ];

      
        
        14
        +      experimental-features = [ "nix-command" "flakes" ];

      
        
        15
        +    };

      
        
        16
        +  };

      
        
        17
        +

      
        
        18
        +  environment.systemPackages = with pkgs; [

      
        
        19
        +    git

      
        
        20
        +    htop

      
        
        21
        +    neovim

      
        
        22
        +  ];

      
        
        23
        +}

      
M nix/modules/freshrss.nixnix/modules/services/freshrss.nix
···
        1
        
        -{ config, pkgs, ... }:

      
        2
        
        -{

      
        
        1
        +{ config, pkgs, ... }: {

      
        3
        2
           age.secrets.freshrss-olex = {

      
        4
        
        -    file = ../secrets/freshrss-olex.age;

      
        
        3
        +    file = ../../secrets/freshrss-olex.age;

      
        5
        4
             owner = "freshrss";

      
        6
        5
             group = "freshrss";

      
        7
        6
           };

      
M nix/modules/moviefeed.nixnix/modules/services/moviefeed.nix
···
        1
        1
         { pkgs, ... }:

      
        2
        2
         let

      
        3
        3
           configFile = "/home/q/moviedfeed.yml";

      
        4
        
        -  version = "1875224";

      
        5
        4
           moviefeed = pkgs.buildGoModule {

      
        6
        5
             pname = "moviefeed";

      
        7
        
        -    inherit version;

      
        
        6
        +    version = "lol";

      
        8
        7
             vendorHash = "sha256-FWkYhhX/cZhF+ctgbYPhPRYcQZSLIL3zoaxqrbWZCcU=";

      
        9
        8
             src = pkgs.fetchFromGitHub {

      
        10
        9
               owner = "olexsmir";

      
        11
        10
               repo = "moviefeed";

      
        12
        
        -      rev = version;

      
        
        11
        +      rev = "1875224";

      
        13
        12
               hash = "sha256-rmFLFbVQ4P2LdezM6ZGS+DI9NY4VMpXrp1p1QjB9FO0=";

      
        14
        13
             };

      
        15
        14
           };

      
        16
        
        -in

      
        17
        
        -{

      
        
        15
        +in {

      
        18
        16
           services.caddy.virtualHosts."moviefeed.olexsmir.xyz".extraConfig = ''

      
        19
        17
             reverse_proxy localhost:8000

      
        20
        18
           '';

      
M nix/modules/mugit.nixnix/modules/services/mugit.nix
···
        1
        1
         { config, ... }:

      
        2
        
        -{

      
        
        2
        +let mkSec = file: { inherit file; owner = "mugit"; group = "mugit"; };

      
        
        3
        +in {

      
        
        4
        +  age.secrets.github-token = mkSec ../../secrets/github-token.age;

      
        
        5
        +  age.secrets.mugit-host   = mkSec ../../secrets/mugit-host.age;

      
        
        6
        +

      
        3
        7
           services.caddy.virtualHosts."git.olexsmir.xyz".extraConfig = ''

      
        4
        8
             reverse_proxy localhost:8008

      
        5
        9
           '';

      
        6
        10
         

      
        7
        
        -  age.secrets.github_token = {

      
        8
        
        -    file = ../secrets/github_token.age;

      
        9
        
        -    owner = "mugit";

      
        10
        
        -    group = "mugit";

      
        11
        
        -  };

      
        12
        
        -

      
        13
        
        -  age.secrets.mugit_host = {

      
        14
        
        -    file = ../secrets/mugit_host.age;

      
        15
        
        -    owner = "mugit";

      
        16
        
        -    group = "mugit";

      
        17
        
        -  };

      
        18
        
        -

      
        19
        11
           services.mugit = {

      
        20
        12
             enable = true;

      
        21
        13
             exposeCli = true;

      ···
        31
        23
               ssh = {

      
        32
        24
                 enable = true;

      
        33
        25
                 port = 22;

      
        34
        
        -        host_key = config.age.secrets.mugit_host.path;

      
        
        26
        +        host_key = config.age.secrets.mugit-host.path;

      
        35
        27
                 keys = [

      
        36
        28
                   "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLLJdkVYKZgsayw+sHanKPKZbI0RMS2CakqBCEi5Trz"

      
        37
        29
                   "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMPQ0Qz0DFB+rGrD8ScUqbUTZ1/O8FHrOBF5bIAGQgMj"

      ···
        40
        32
               mirror = {

      
        41
        33
                 enable = true;

      
        42
        34
                 interval = "6h";

      
        43
        
        -        github_token = "$file:" + config.age.secrets.github_token.path;

      
        
        35
        +        github_token = "$file:" + config.age.secrets.github-token.path;

      
        44
        36
               };

      
        45
        37
             };

      
        46
        38
           };

      
A nix/modules/services/wireguard.nix
···
        
        1
        +{ config, pkgs, ... }:

      
        
        2
        +let

      
        
        3
        +  peers = [

      
        
        4
        +    { name = "laptop"; key = "cF0abpqZiMrofQUgFHS4D+FuXq3ZoCPBQUlr6WuvBwM="; ip = "10.100.0.2"; }

      
        
        5
        +    { name = "phone";  key = "GodHMXUBh/0aEyz+XBJID7pm/Hi8xnZv6YzkQbl/Uwc="; ip = "10.100.0.3"; }

      
        
        6
        +  ];

      
        
        7
        +in {

      
        
        8
        +  age.secrets.wg-key.file = ../../secrets/wg-key.age;

      
        
        9
        +

      
        
        10
        +  boot.kernel.sysctl."net.ipv4.ip_forward" = 1;

      
        
        11
        +  networking = {

      
        
        12
        +    nat = {

      
        
        13
        +      enable = true;

      
        
        14
        +      externalInterface = "ens3";

      
        
        15
        +      internalInterfaces = [ "wg0" ];

      
        
        16
        +    };

      
        
        17
        +    firewall.allowedUDPPorts = [ 51820 ];

      
        
        18
        +    wireguard.interfaces."wg0" = {

      
        
        19
        +      ips = [ "10.100.0.1/24" ];

      
        
        20
        +      listenPort = 51820;

      
        
        21
        +      privateKeyFile = config.age.secrets.wg-key.path;

      
        
        22
        +      postSetup = ''${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE'';

      
        
        23
        +      postShutdown = ''${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE'';

      
        
        24
        +      peers = map(p: {

      
        
        25
        +        publicKey = p.key;

      
        
        26
        +        allowedIPs = [ "${p.ip}/32" ];

      
        
        27
        +      }) peers;

      
        
        28
        +    };

      
        
        29
        +  };

      
        
        30
        +}

      
D nix/modules/shortener.nix
···
        1
        
        -{ ... }: {

      
        2
        
        -  services.caddy.virtualHosts."s.olexsmir.xyz".extraConfig = ''

      
        3
        
        -    map {path} {redirect-uri} {

      
        4
        
        -      import /redirects.caddy

      
        5
        
        -    }

      
        6
        
        -    redir {redirect-uri}

      
        7
        
        -  '';

      
        8
        
        -}

      
D nix/modules/soju.nix
···
        1
        
        -{ ... }:

      
        2
        
        -let

      
        3
        
        -  domain = "irc.olexsmir.xyz";

      
        4
        
        -in

      
        5
        
        -{

      
        6
        
        -  networking.firewall.allowedTCPPorts = [ 6697 ];

      
        7
        
        -  services.caddy = {

      
        8
        
        -    virtualHosts.${domain}.extraConfig = ''

      
        9
        
        -      respond "irc bouncer"

      
        10
        
        -    '';

      
        11
        
        -    globalConfig = ''

      
        12
        
        -      layer4 {

      
        13
        
        -        :6697 {

      
        14
        
        -          route {

      
        15
        
        -            tls {

      
        16
        
        -              connection_policy {

      
        17
        
        -                alpn http/1.1 http/1.0 irc

      
        18
        
        -                default_sni ${domain}

      
        19
        
        -              }

      
        20
        
        -            }

      
        21
        
        -            proxy {

      
        22
        
        -              proxy_protocol v2

      
        23
        
        -              upstream localhost:6667

      
        24
        
        -            }

      
        25
        
        -          }

      
        26
        
        -        }

      
        27
        
        -      }

      
        28
        
        -    '';

      
        29
        
        -  };

      
        30
        
        -

      
        31
        
        -  services.soju = {

      
        32
        
        -    enable = true;

      
        33
        
        -    hostName = domain;

      
        34
        
        -    listen = [ "irc+insecure://localhost:6667" ];

      
        35
        
        -    acceptProxyIP = [ "localhost" ];

      
        36
        
        -  };

      
        37
        
        -}

      
M nix/modules/tangled.nixnix/modules/services/tangled.nix
···
        1
        
        -{ ... }:

      
        2
        
        -{

      
        
        1
        +{ ... }: {

      
        3
        2
           services.caddy.virtualHosts."knot.olexsmir.xyz".extraConfig = ''

      
        4
        3
             reverse_proxy localhost:5555

      
        5
        4
           '';

      
A nix/modules/users/q.nix
···
        
        1
        +{ config, ... }:

      
        
        2
        +let

      
        
        3
        +  ssh-keys = [

      
        
        4
        +    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLLJdkVYKZgsayw+sHanKPKZbI0RMS2CakqBCEi5Trz" # laptop

      
        
        5
        +    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINeXccmMQ9jfLG2Z8CITaZZ+pUgYVNVYDFtmdkBHd3xk" # phone

      
        
        6
        +  ];

      
        
        7
        +in

      
        
        8
        +{

      
        
        9
        +  age.secrets.q-password.file = ../../secrets/q-pass.age;

      
        
        10
        +

      
        
        11
        +  users.users.q = {

      
        
        12
        +    isNormalUser = true;

      
        
        13
        +    extraGroups = [ "wheel" ];

      
        
        14
        +    hashedPasswordFile = config.age.secrets.q-password.path;

      
        
        15
        +    openssh.authorizedKeys.keys = ssh-keys;

      
        
        16
        +  };

      
        
        17
        +}

      
D nix/modules/vikunja.nix
···
        1
        
        -{ ... }:

      
        2
        
        -{

      
        3
        
        -  services.caddy.virtualHosts."vikunja.olexsmir.xyz".extraConfig = ''

      
        4
        
        -    reverse_proxy localhost:3456

      
        5
        
        -  '';

      
        6
        
        -

      
        7
        
        -  services.vikunja = {

      
        8
        
        -    enable = true;

      
        9
        
        -    frontendScheme = "https";

      
        10
        
        -    frontendHostname = "vikunja.olexsmir.xyz";

      
        11
        
        -    settings = {

      
        12
        
        -      service = {

      
        13
        
        -        enableregistration = true;

      
        14
        
        -      };

      
        15
        
        -    };

      
        16
        
        -  };

      
        17
        
        -}

      
D nix/modules/wireguard.nix
···
        1
        
        -{ config, pkgs, ... }:

      
        2
        
        -{

      
        3
        
        -

      
        4
        
        -  boot.kernel.sysctl."net.ipv4.ip_forward" = 1;

      
        5
        
        -

      
        6
        
        -  networking.nat = {

      
        7
        
        -    enable = true;

      
        8
        
        -    externalInterface = "ens3";

      
        9
        
        -    internalInterfaces = [ "wg0" ];

      
        10
        
        -  };

      
        11
        
        -

      
        12
        
        -  age.secrets.wg-private-key.file = ../secrets/wg-private-key.age;

      
        13
        
        -

      
        14
        
        -  networking.firewall.allowedUDPPorts = [ 51820 ];

      
        15
        
        -  networking.wireguard.interfaces.wg0 = {

      
        16
        
        -    ips = [ "10.100.0.1/24" ];

      
        17
        
        -    listenPort = 51820;

      
        18
        
        -    privateKeyFile = config.age.secrets.wg-private-key.path;

      
        19
        
        -

      
        20
        
        -    postSetup = ''${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE'';

      
        21
        
        -    postShutdown = ''${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE'';

      
        22
        
        -

      
        23
        
        -    peers = [

      
        24
        
        -      {

      
        25
        
        -        publicKey = "cF0abpqZiMrofQUgFHS4D+FuXq3ZoCPBQUlr6WuvBwM="; # laptop

      
        26
        
        -        allowedIPs = [ "10.100.0.2/32" ];

      
        27
        
        -      }

      
        28
        
        -      {

      
        29
        
        -        publicKey = "GodHMXUBh/0aEyz+XBJID7pm/Hi8xnZv6YzkQbl/Uwc="; # phone

      
        30
        
        -        allowedIPs = [ "10.100.0.3/32" ];

      
        31
        
        -      }

      
        32
        
        -    ];

      
        33
        
        -  };

      
        34
        
        -}

      
M nix/secrets/freshrss-olex.age
···
        1
        
        -age-encryption.org/v1

      
        2
        
        --> ssh-ed25519 jgjvUw dIOnVUmbf9R0pl92JrlTDWa/htZQEUUPdTbNCKTa+S4

      
        3
        
        -R4unw/VGqtrNG/otzW3HjvgMtZK+RT7tqs6dZkLh3pc

      
        4
        
        --> X25519 E3+gKkjH6LkkYhnwE+9QbPiSYOEF3GJhbVXy2+mCDTM

      
        5
        
        -IcwPmVZ8IOLhzJNUeMicC0cPmDym0TjFb7P8MHBwDNI

      
        6
        
        ---- JF/k9Wyj6kIEX7F1SjkqiFlv8UFngZ4lJvVwWQ8425c

      
        7
        
        -mr8M}2;	-D~vMa9"T

      
        8
        
        -:ڔV9
      
        
        1
        +-----BEGIN AGE ENCRYPTED FILE-----

      
        
        2
        +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1WjVHL21uZGpHSDluMGVE

      
        
        3
        +UWovMlQzb2l2TFhjK2ZUbWxtbGhySzkvVWtnCnVCWVllSHVsZURkRTZlMkpaWWs3

      
        
        4
        +MGFWWFVDazBWRVJtOWw4WEVKRWUreFkKLT4gc3NoLWVkMjU1MTkgamdqdlV3IEtB

      
        
        5
        +OEwxSENFSmdBZWNnZ1E2NmhXUE94OHprYzhveVV3REdrcGM4eGpnaWsKdEJkbElU

      
        
        6
        +cjBPREd4OHo5a0tzTVhBaGsySVVUZm5uZ0pvenNYNE9URmdCSQotLS0gYWlmQStJ

      
        
        7
        +blNKMThLUTROWS9ybStlbnh1dzg2RVd1c3c3YjZMeUxJdWV1QQogiJjGLMGCGslk

      
        
        8
        +wErR1S5x3bK8hPUwasyvA+3ZrgDkIwuQTCKhsd9ZbQ==

      
        
        9
        +-----END AGE ENCRYPTED FILE-----

      
A nix/secrets/q-pass.age
···
        
        1
        +-----BEGIN AGE ENCRYPTED FILE-----

      
        
        2
        +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmVXY5SDIyYkNmRVVrNWti

      
        
        3
        +bFNiaU9XL3AzL0o0UUNJUStKTC9lWldaVmpZCjRrNDloV2RiR2prWXNjZ09PMGJE

      
        
        4
        +cnBJWGZDR0N0RVN3M0U5SndSQkRFcjAKLT4gc3NoLWVkMjU1MTkgamdqdlV3IHdr

      
        
        5
        +WnJua0xQdUozYndzY0cxS3FLTHo3R2xiZHBhWnYyWXZuako5ZEd0RUEKd3VlSnRq

      
        
        6
        +ZmhVRlQ0NGI4ZXVieTdCNzBmdVhOWWVYa1FoSTdXVkNUZ3pSRQotLS0geTNkL1JQ

      
        
        7
        +aUg4RkxrOGNBM3dJVWZXVVoycWVMKzFEVWFwZVRxV2EwNWp6WQrTE6r0BDtTNhdN

      
        
        8
        +Gs0+LJc5l/L3MuhrAvbW9PIJo/AMxR6Sbkyg

      
        
        9
        +-----END AGE ENCRYPTED FILE-----

      
D nix/secrets/q-password.age
···
        1
        
        -age-encryption.org/v1

      
        2
        
        --> ssh-ed25519 jgjvUw Yy4VmBRoL5acIbY+GMmg5qW9iTp9U/XZSvx12r3SzRU

      
        3
        
        -rNNYDN0ikwrSJf8kKi0uLczMY39rg0Xi3MSvR9fAzYU

      
        4
        
        --> X25519 t9640/amrr9kdgjY9ALE0n6yoaqMGTCjjk0OxPmHwwM

      
        5
        
        -x6nm6fXvrrRngMJVY8oGh8QJU0K5TBkl7S+v5E3k8iw

      
        6
        
        ---- kM18cW1nk37CnZlFmdS0XAuCt6gHzazZ83X9iNuzb5w

      
        7
        
        -XOb^Ye]yG-dM
      
M nix/secrets/secrets.nix
···
        1
        1
         let

      
        2
        2
           laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLLJdkVYKZgsayw+sHanKPKZbI0RMS2CakqBCEi5Trz";

      
        3
        3
           infra = "age1k4e6mm0whyjzfaqlhahu2pst4vxvzul53xs3ff0tk8uty459zgzqk3965k";

      
        4
        
        -  allKeys = [

      
        5
        
        -    laptop

      
        6
        
        -    infra

      
        7
        
        -  ];

      
        
        4
        +  allKeys = [ laptop infra ];

      
        8
        5
         in

      
        9
        6
         {

      
        10
        
        -  "q-password.age".publicKeys = allKeys;

      
        
        7
        +  "q-pass.age".publicKeys = allKeys;

      
        11
        8
           "freshrss-olex.age".publicKeys = allKeys;

      
        12
        
        -  "wg-private-key.age".publicKeys = allKeys;

      
        13
        
        -  "github_token.age".publicKeys = allKeys;

      
        14
        
        -  "mugit_host.age".publicKeys = allKeys;

      
        
        9
        +  "wg-key.age".publicKeys = allKeys;

      
        
        10
        +  "github-token.age".publicKeys = allKeys;

      
        
        11
        +  "mugit-host.age".publicKeys = allKeys;

      
        15
        12
         }

      
A nix/secrets/wg-key.age
···
        
        1
        +-----BEGIN AGE ENCRYPTED FILE-----

      
        
        2
        +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwNkc5c08wWHVhWjFob2dS

      
        
        3
        +VllkeDFJQ1NqS2lvUlJOdGlFeTM2NlVUYlVvCklGUVVsRVk1K2ZVaUYrdGoycUdm

      
        
        4
        +bDRxZlFnZDBLWHNJdUkvS0RnMHVDVjgKLT4gc3NoLWVkMjU1MTkgamdqdlV3IEpP

      
        
        5
        +T3RhNURDc0xvTC9OY3IwM0FCUk00d041RlcxeFdObXJod2J5bThiQTQKUzdTTWtZ

      
        
        6
        +bXdhOUk1MndoNUlzaVltcFlTVlJLMmppSTlwVnRGT3lLejZPVQotLS0gSHA5clBR

      
        
        7
        +YjZIRHcyUXJMVTZZUkRWTjQwdjcyeGtzT2JvWkZ4R0F3ODJuZwpFyHRBsfuOeXFT

      
        
        8
        +1zD3BpztIgzpNZQtH74T9ZbQmNSTbZ5z1GjmLU20QxNkNnw/IWwjzuXTSiWJ0sIc

      
        
        9
        +iTVF53i1xPS7aIyPnHeclysIxw==

      
        
        10
        +-----END AGE ENCRYPTED FILE-----

      
D nix/secrets/wg-private-key.age

Not showing binary file.

D nix/users/_sshkeys.nix
···
        1
        
        -[

      
        2
        
        -  "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLLJdkVYKZgsayw+sHanKPKZbI0RMS2CakqBCEi5Trz" # laptop

      
        3
        
        -  "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINeXccmMQ9jfLG2Z8CITaZZ+pUgYVNVYDFtmdkBHd3xk u0_a930@localhost" # phone

      
        4
        
        -]

      
D nix/users/q.nix
···
        1
        
        -{ config, ... }:

      
        2
        
        -{

      
        3
        
        -  age.secrets.q-password.file = ../secrets/q-password.age;

      
        4
        
        -

      
        5
        
        -  users.users.q = {

      
        6
        
        -    isNormalUser = true;

      
        7
        
        -    extraGroups = [

      
        8
        
        -      "wheel"

      
        9
        
        -      "headscale"

      
        10
        
        -    ];

      
        11
        
        -    hashedPasswordFile = config.age.secrets.q-password.path;

      
        12
        
        -    openssh.authorizedKeys.keys = import ./_sshkeys.nix;

      
        13
        
        -  };

      
        14
        
        -}