nixos-config

My NixOS configuration files

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
{
  config,
  lib,
  pkgs,
  ...
}:

{
  nix = {
    # BAD NIX STORE STOP BEING 100GB
    # Don't run the optimiser automatically though, since it doesn't save that much space and messes up generation build dates
    # There's also auto-optimise-store but it apparently has performance issues
    gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 7d";
    };
    settings = {
      # Don't trash my $HOME please like come on it's not 2005 anymore
      use-xdg-base-directories = true;
      # Fancy stuff yay
      experimental-features = [
        # The new CLI is so much nicer
        "nix-command"
        # Still have no idea what a "flake" is
        "flakes"
        # Leanify Nix
        "pipe-operators"
      ];
    };
  };

  boot = {
    # Instant boot
    loader.timeout = 0;
    # This is what literally every other distro does
    tmp.useTmpfs = true;
  };

  # NixOS is a disk destroyer
  # I NEED ZSTD
  fileSystems."/".options = [ "compress=zstd" ];

  # Download more RAM
  zramSwap.enable = true;

  users.users.a = {
    # Am I really that normal?
    isNormalUser = true;
    extraGroups = [ "wheel" ];
    # I can't bash you know
    shell = pkgs.fish;
    initialPassword = "change asap";
  };

  # Enable the boring stuff
  programs = {
    fish.enable = true;
    git.enable = true;
  };

  environment.systemPackages = with pkgs; [
    btop
    # Apparently hugo is mission-critical software now
    hugo
    micro
  ];

  # It sync things I guess
  services.syncthing = {
    enable = true;
    user = "a";
    group = "users";
    openDefaultPorts = true;
    # The default when running Syncthing normally
    configDir = "/home/a/.local/state/syncthing";
  };

  # THE ONLY CORRECT BACKUP METHOD
  services.btrbk.instances.btrbk.settings = {
    timestamp_format = "short";
    snapshot_dir = "/.snapshots";
    snapshot_preserve = "3d 3w 3m *y";
    snapshot_preserve_min = "latest";
  };

  # BLAZINGLY FAST MEMORY SAFE
  security.sudo-rs.enable = true;

  # This option defines the first version of NixOS you have installed on this particular machine,
  # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
  #
  # Most users should NEVER change this value after the initial install, for any reason,
  # even if you've upgraded your system to a new NixOS release.
  #
  # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
  # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
  # to actually do that.
  #
  # This value being lower than the current NixOS release does NOT mean your system is
  # out of date, out of support, or vulnerable.
  #
  # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
  # and migrated your data accordingly.
  #
  # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
  system.stateVersion = "24.11"; # Did you read the comment?
}