DEVELOPMENT ENVIRONMENT

~liljamo/nix-arta

a8156c500e9efa2a17b05ee1852f65a05f5acb60 — Jonni Liljamo 4 months ago
feat: initial version
A  => .sops.yaml +10 -0
@@ 1,10 @@
keys:
  - &liljamo_gpg 848EEBCEE9F0D29D25C321A658577946A65EB712
  - &arwen age15hcszwfk0d6cu9ua6g4udj9tdq63jm8lja66ktxu0fjfuczczcwsm5kcxn
creation_rules:
  - path_regex: secrets/arwen/[^/]+\.yaml$
    key_groups:
    - pgp:
      - *liljamo_gpg
      age:
      - *arwen

A  => README.md +5 -0
@@ 1,5 @@
# nix-arta


## Inspiration
[pluiedev/flake](https://github.com/pluiedev/flake) for structure.

A  => flake.lock +438 -0
@@ 1,438 @@
{
  "nodes": {
    "devshell": {
      "inputs": {
        "flake-utils": "flake-utils",
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1717408969,
        "narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=",
        "owner": "numtide",
        "repo": "devshell",
        "rev": "1ebbe68d57457c8cae98145410b164b5477761f4",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "devshell",
        "type": "github"
      }
    },
    "flake-compat": {
      "locked": {
        "lastModified": 1696426674,
        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
        "revCount": 57,
        "type": "tarball",
        "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
      },
      "original": {
        "type": "tarball",
        "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
      }
    },
    "flake-parts": {
      "inputs": {
        "nixpkgs-lib": [
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719994518,
        "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=",
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7",
        "type": "github"
      },
      "original": {
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "type": "github"
      }
    },
    "flake-parts_2": {
      "inputs": {
        "nixpkgs-lib": "nixpkgs-lib"
      },
      "locked": {
        "lastModified": 1719994518,
        "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=",
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7",
        "type": "github"
      },
      "original": {
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "type": "github"
      }
    },
    "flake-parts_3": {
      "inputs": {
        "nixpkgs-lib": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719877454,
        "narHash": "sha256-g5N1yyOSsPNiOlFfkuI/wcUjmtah+nxdImJqrSATjOU=",
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "rev": "4e3583423212f9303aa1a6337f8dffb415920e4f",
        "type": "github"
      },
      "original": {
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "type": "github"
      }
    },
    "flake-utils": {
      "inputs": {
        "systems": "systems"
      },
      "locked": {
        "lastModified": 1701680307,
        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
        "owner": "numtide",
        "repo": "flake-utils",
        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "flake-utils",
        "type": "github"
      }
    },
    "git-hooks": {
      "inputs": {
        "flake-compat": [
          "nvim-flake",
          "nixvim",
          "flake-compat"
        ],
        "gitignore": "gitignore",
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ],
        "nixpkgs-stable": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719259945,
        "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=",
        "owner": "cachix",
        "repo": "git-hooks.nix",
        "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07",
        "type": "github"
      },
      "original": {
        "owner": "cachix",
        "repo": "git-hooks.nix",
        "type": "github"
      }
    },
    "gitignore": {
      "inputs": {
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "git-hooks",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1709087332,
        "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
        "owner": "hercules-ci",
        "repo": "gitignore.nix",
        "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
        "type": "github"
      },
      "original": {
        "owner": "hercules-ci",
        "repo": "gitignore.nix",
        "type": "github"
      }
    },
    "home-manager": {
      "inputs": {
        "nixpkgs": [
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1720042825,
        "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=",
        "owner": "nix-community",
        "repo": "home-manager",
        "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "ref": "release-24.05",
        "repo": "home-manager",
        "type": "github"
      }
    },
    "home-manager_2": {
      "inputs": {
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719827439,
        "narHash": "sha256-tneHOIv1lEavZ0vQ+rgz67LPNCgOZVByYki3OkSshFU=",
        "owner": "nix-community",
        "repo": "home-manager",
        "rev": "59ce796b2563e19821361abbe2067c3bb4143a7d",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "home-manager",
        "type": "github"
      }
    },
    "impermanence": {
      "locked": {
        "lastModified": 1719091691,
        "narHash": "sha256-AxaLX5cBEcGtE02PeGsfscSb/fWMnyS7zMWBXQWDKbE=",
        "owner": "nix-community",
        "repo": "impermanence",
        "rev": "23c1f06316b67cb5dabdfe2973da3785cfe9c34a",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "impermanence",
        "type": "github"
      }
    },
    "nix-darwin": {
      "inputs": {
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719845423,
        "narHash": "sha256-ZLHDmWAsHQQKnmfyhYSHJDlt8Wfjv6SQhl2qek42O7A=",
        "owner": "lnl7",
        "repo": "nix-darwin",
        "rev": "ec12b88104d6c117871fad55e931addac4626756",
        "type": "github"
      },
      "original": {
        "owner": "lnl7",
        "repo": "nix-darwin",
        "type": "github"
      }
    },
    "nixos-hardware": {
      "locked": {
        "lastModified": 1720515935,
        "narHash": "sha256-8b+fzR4W2hI5axwB+4nBwoA15awPKkck4ghhCt8v39M=",
        "owner": "nixos",
        "repo": "nixos-hardware",
        "rev": "a111ce6b537df12a39874aa9672caa87f8677eda",
        "type": "github"
      },
      "original": {
        "owner": "nixos",
        "repo": "nixos-hardware",
        "type": "github"
      }
    },
    "nixpkgs": {
      "locked": {
        "lastModified": 1720553833,
        "narHash": "sha256-IXMiHQMtdShDXcBW95ctA+m5Oq2kLxnBt7WlMxvDQXA=",
        "owner": "nixos",
        "repo": "nixpkgs",
        "rev": "249fbde2a178a2ea2638b65b9ecebd531b338cf9",
        "type": "github"
      },
      "original": {
        "owner": "nixos",
        "ref": "nixos-24.05",
        "repo": "nixpkgs",
        "type": "github"
      }
    },
    "nixpkgs-lib": {
      "locked": {
        "lastModified": 1719876945,
        "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=",
        "type": "tarball",
        "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
      },
      "original": {
        "type": "tarball",
        "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
      }
    },
    "nixpkgs-unstable": {
      "locked": {
        "lastModified": 1720542800,
        "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=",
        "owner": "nixos",
        "repo": "nixpkgs",
        "rev": "feb2849fdeb70028c70d73b848214b00d324a497",
        "type": "github"
      },
      "original": {
        "owner": "nixos",
        "ref": "nixos-unstable",
        "repo": "nixpkgs",
        "type": "github"
      }
    },
    "nixvim": {
      "inputs": {
        "devshell": "devshell",
        "flake-compat": "flake-compat",
        "flake-parts": "flake-parts_3",
        "git-hooks": "git-hooks",
        "home-manager": "home-manager_2",
        "nix-darwin": "nix-darwin",
        "nixpkgs": [
          "nvim-flake",
          "nixpkgs"
        ],
        "treefmt-nix": "treefmt-nix"
      },
      "locked": {
        "lastModified": 1720702748,
        "narHash": "sha256-cmOvEwKQx1vs/Sx4pE4exqPMvOwnI/5DrinkQG8X1qY=",
        "owner": "nix-community",
        "repo": "nixvim",
        "rev": "ca01a644ef0ef924dd0c6b2b54c4f2a8019fe5cf",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "nixvim",
        "type": "github"
      }
    },
    "nvim-flake": {
      "inputs": {
        "flake-parts": "flake-parts_2",
        "nixpkgs": [
          "nixpkgs-unstable"
        ],
        "nixvim": "nixvim"
      },
      "locked": {
        "lastModified": 1720713211,
        "narHash": "sha256-8wgaKSmEh3vx2eXbTGhDEaFdhNOtEI+vL/nfPlZ83bs=",
        "ref": "refs/heads/master",
        "rev": "3748c750a040c5669454f7aaf0c8f9e5bbcff46e",
        "revCount": 27,
        "type": "git",
        "url": "https://git.src.quest/~liljamo/nvim-flake"
      },
      "original": {
        "type": "git",
        "url": "https://git.src.quest/~liljamo/nvim-flake"
      }
    },
    "root": {
      "inputs": {
        "flake-parts": "flake-parts",
        "home-manager": "home-manager",
        "impermanence": "impermanence",
        "nixos-hardware": "nixos-hardware",
        "nixpkgs": "nixpkgs",
        "nixpkgs-unstable": "nixpkgs-unstable",
        "nvim-flake": "nvim-flake",
        "sops-nix": "sops-nix"
      }
    },
    "sops-nix": {
      "inputs": {
        "nixpkgs": [
          "nixpkgs-unstable"
        ],
        "nixpkgs-stable": [
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1720479166,
        "narHash": "sha256-jqvhLDXzTLTHq9ZviFOpcTmXXmnbLfz7mWhgMNipMN4=",
        "owner": "Mic92",
        "repo": "sops-nix",
        "rev": "67035a355b1d52d2d238501f8cc1a18706979760",
        "type": "github"
      },
      "original": {
        "owner": "Mic92",
        "repo": "sops-nix",
        "type": "github"
      }
    },
    "systems": {
      "locked": {
        "lastModified": 1681028828,
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
        "owner": "nix-systems",
        "repo": "default",
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
        "type": "github"
      },
      "original": {
        "owner": "nix-systems",
        "repo": "default",
        "type": "github"
      }
    },
    "treefmt-nix": {
      "inputs": {
        "nixpkgs": [
          "nvim-flake",
          "nixvim",
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1719887753,
        "narHash": "sha256-p0B2r98UtZzRDM5miGRafL4h7TwGRC4DII+XXHDHqek=",
        "owner": "numtide",
        "repo": "treefmt-nix",
        "rev": "bdb6355009562d8f9313d9460c0d3860f525bc6c",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "treefmt-nix",
        "type": "github"
      }
    }
  },
  "root": "root",
  "version": 7
}

A  => flake.nix +55 -0
@@ 1,55 @@
{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
    nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";

    nixos-hardware.url = "github:nixos/nixos-hardware";

    flake-parts = {
      url = "github:hercules-ci/flake-parts";
      inputs.nixpkgs-lib.follows = "nixpkgs";
    };

    # Core
    impermanence.url = "github:nix-community/impermanence";

    home-manager = {
      url = "github:nix-community/home-manager/release-24.05";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    sops-nix = {
      url = "github:Mic92/sops-nix";
      inputs.nixpkgs-stable.follows = "nixpkgs";
      inputs.nixpkgs.follows = "nixpkgs-unstable";
    };

    # Own flakes
    nvim-flake = {
      url = "git+https://git.src.quest/~liljamo/nvim-flake";
      inputs.nixpkgs.follows = "nixpkgs-unstable";
    };
  };

  outputs = inputs:
    inputs.flake-parts.lib.mkFlake {inherit inputs;} {
      imports = [
        #./hm-modules
        ./systems
      ];

      systems = ["x86_64-linux"];
      perSystem = {
        pkgs,
        system,
        ...
      }: {
        devShells.default = pkgs.mkShell {
          buildInputs = with pkgs; [
            alejandra
            sops
          ];
        };
      };
    };
}

A  => roles/audio.nix +23 -0
@@ 1,23 @@
{
  config,
  lib,
  ...
}: let
  cfg = config.roles.audio;
in {
  options.roles.audio = {
    enable = lib.mkEnableOption "enable audio";
  };

  config = lib.mkIf cfg.enable {
    services.pipewire = {
      enable = true;
      alsa = {
        enable = true;
        support32Bit = true;
      };
      jack.enable = true;
      pulse.enable = true;
    };
  };
}

A  => roles/base.nix +45 -0
@@ 1,45 @@
{
  config,
  lib,
  ...
}: let
  cfg = config.roles.base;
in {
  options.roles.base = {
    username = lib.mkOption {
      type = lib.types.str;
    };
    isWheel = lib.mkEnableOption "wheter to enable admin permissions";
    hashedPasswordFile = lib.mkOption {
      type = lib.types.path;
    };
  };

  imports = [
    (lib.mkAliasOptionModule ["hm"] [
      "home-manager"
      "users"
      cfg.username
    ])
  ];

  config = let
    homeDirectory = "/home/${cfg.username}";
  in {
    users.users.${cfg.username} = {
      isNormalUser = true;
      extraGroups = lib.optional cfg.isWheel "wheel";
      home = homeDirectory;
      hashedPasswordFile = cfg.hashedPasswordFile;
    };
    home-manager = {
      useUserPackages = true;
      useGlobalPkgs = true;
    };
    hm.home = {
      inherit (cfg) username;
      inherit homeDirectory;
      stateVersion = config.system.stateVersion;
    };
  };
}

A  => roles/bluetooth.nix +27 -0
@@ 1,27 @@
{
  config,
  lib,
  ...
}: let
  cfg = config.roles.bluetooth;
in {
  options.roles.bluetooth = {
    enable = lib.mkEnableOption "enable bluetooth";
    enableHDAudio = lib.mkEnableOption "enable HD audio for bluetooth";
  };

  config = lib.mkIf cfg.enable {
    services.blueman.enable = true;

    services.pipewire.wireplumber.extraConfig = lib.mkIf cfg.enableHDAudio {
      bluetoothEnhancements = {
        "monitor.bluez.properties" = {
          "bluez5.enable-sbc-xq" = true;
          "bluez5.enable-msbc" = true;
          "bluez5.enable-hw-volume" = true;
          "bluez5.roles" = ["hsp_hs" "hsp_ag" "hfp_hf" "hfp_ag"];
        };
      };
    };
  };
}

A  => roles/default.nix +10 -0
@@ 1,10 @@
{...}: {
  imports = [
    ./audio.nix
    ./bluetooth.nix
    ./base.nix
    ./git.nix
    ./nix.nix
    ./zellij.nix
  ];
}

A  => roles/git.nix +42 -0
@@ 1,42 @@
{
  config,
  lib,
  pkgs,
  ...
}: let
  cfg = config.roles.git;
in {
  options.roles.git = {
    enable = lib.mkEnableOption "enable git";
    email = lib.mkOption {
      type = lib.types.str;
    };
    name = lib.mkOption {
      type = lib.types.str;
    };
    gitExtraConfig = lib.mkOption {
      type = lib.types.lines;
      default = {};
    };
    enableLazygit = lib.mkEnableOption "enable lazygit";
  };

  config = {
    programs.lazygit = lib.mkIf cfg.enableLazygit {
      enable = true;
      settings = {
        disableStartupPopups = true;
      };
    };

    hm = {
      programs.git = lib.mkIf cfg.enable {
        enable = true;
        package = pkgs.gitAndTools.gitFull;
        userEmail = cfg.email;
        userName = cfg.name;
        extraConfig = cfg.gitExtraConfig;
      };
    };
  };
}

A  => roles/nix.nix +14 -0
@@ 1,14 @@
{
  nix = {
    gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 7d";
    };
    settings = {
      auto-optimise-store = true;
      experimental-features = ["nix-command" "flakes"];
      trusted-users = ["@wheel"];
    };
  };
}

A  => roles/zellij.nix +23 -0
@@ 1,23 @@
{
  config,
  lib,
  ...
}: let
  cfg = config.roles.zellij;
in {
  options.roles.zellij = {
    enable = lib.mkEnableOption "enable zellij";
  };

  config = lib.mkIf cfg.enable {
    hm.programs.zellij = {
      enable = true;
      settings = {
        simplified_ui = true;
        pane_frames = false;
        default_layout = "compact";
        ui.pane_frames.hide_session_name = true;
      };
    };
  };
}

A  => secrets/arwen/secrets.yaml +34 -0
@@ 1,34 @@
rootPwd: ENC[AES256_GCM,data:LnMbR4IstZqCDz+98+lZX8O2mzQc40t3Zf4Ka3wLOEuFExSn63xdH/PV2wLCUm2ufI95tpldiROAZxCifYhy9+Ls8E6GNqV0V0d6PkdyVi/9xT5rH23yOc1/dIYWbSZFcz4OlU+JPW81wA==,iv:6vm3G2cxIf/1oKxwZFtoYKCLt+ustd7uxBFEMSO9uPY=,tag:3/z0t9z54LGEY8HbIZ3G8Q==,type:str]
skyePwd: ENC[AES256_GCM,data:QT4pp8WSVCJBZBLyBP35Rjk08xxE+osibBj1irOLzyuYNH27XvYTtE3IJ4WtFdtSbDiHDGYDg8ZIDF5Z8ACgFngWuL9Akw7FsPuTzqsDLm3Gmum1tgDGXd3TlEc1WNNyZlzEjcA2Zz5INA==,iv:eeNL/i5tL12QQ73FD02mBvQ8Rl/QkJGFsC3tuinw5gc=,tag:Aks+C0qXUHItfbhTiBaLgA==,type:str]
sops:
    kms: []
    gcp_kms: []
    azure_kv: []
    hc_vault: []
    age:
        - recipient: age15hcszwfk0d6cu9ua6g4udj9tdq63jm8lja66ktxu0fjfuczczcwsm5kcxn
          enc: |
            -----BEGIN AGE ENCRYPTED FILE-----
            YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0WGJCUzBUREFkdTgydzBo
            bnowYXc5aVl5WExiUCtORlM1MmhSb29KSlYwClJLTERBOEFhL2VrTDhaTFZCaW5K
            WUZIOHVqQ0krQ3FSYmQ2ckhqS2RWMkkKLS0tIHFRR3UvbFY3MW5Vbk04bitENy9K
            MVdQQjhONDVXS3lpK3EwZ2xwcVkxbE0KwYQHEKyemv2v1qzZcDMKXe0zPWa10kc4
            6sJakrIj+OoMf+upFlmZM8X1VoVbvpDK+duwpPAj4P+2b1jvvQdtHA==
            -----END AGE ENCRYPTED FILE-----
    lastmodified: "2024-07-15T14:21:12Z"
    mac: ENC[AES256_GCM,data:AyEiVTFKjp8uEKhsVQEjBmiCjuBXRbpLuv5HgaPYo7Tp/wHMsgo+O7HcEU/Hx2X3JqWApVjWb4SMMknckrodMlJPxTBM59bCNqZvI4/nqXMQknWO1t25xrHa+blMRLMVMbgjwaq4pYB0IfqN0ZQV3il3DcEx9ItYVMEwGPuqN9c=,iv:rEBT56+bqksGQdzRkxYEalmIuB+qXBgqMilk7H3hZ74=,tag:y1PP0RMZSfwBEGDlvpb/EA==,type:str]
    pgp:
        - created_at: "2024-06-27T15:56:30Z"
          enc: |-
            -----BEGIN PGP MESSAGE-----

            hF4D8ab0ENzkR4wSAQdARmHY/Qd3toPQ0RM7tl8zszzeeyUK33qzi9btz+zuI08w
            ji84v5V0j1w2rjLrXUDLVPZeXGSUDrYF4GRx/hHP1E5zS5llgobVqtAAgejwsDth
            1GgBCQIQnifZFYBHIWHdcKUC7zz38lvhfnNAKwRewyUPZuITpS+8TfsGu7WO3icR
            szfKzn9LCmc0KVB8NS0rWvBgRfblCDXyg85YClju091aufm4ZSFfIcIpsBQd5A2O
            qnBij3QVOSxY+w==
            =ATYo
            -----END PGP MESSAGE-----
          fp: 848EEBCEE9F0D29D25C321A658577946A65EB712
    unencrypted_suffix: _unencrypted
    version: 3.8.1

A  => systems/default.nix +27 -0
@@ 1,27 @@
{
  self,
  inputs,
  ...
}: {
  flake = let
    mkHost = name: cfg:
      inputs.nixpkgs.lib.nixosSystem {
        system = cfg.system;
        specialArgs = cfg.profile.specialArgs;
        modules =
          cfg.profile.modules
          ++ cfg.modules
          ++ [
            ./hosts/${name}
            {
              networking.hostName = name;
            }
          ];
      };

    profiles = import ./profiles inputs;
    hosts = import ./hosts profiles;
  in {
    nixosConfigurations = inputs.nixpkgs.lib.mapAttrs mkHost hosts;
  };
}

A  => systems/hosts/arwen/default.nix +61 -0
@@ 1,61 @@
{
  config,
  inputs,
  lib,
  pkgs,
  ...
}: {
  imports = [
    ./hardware-configuration.nix

    inputs.nixos-hardware.nixosModules.lenovo-thinkpad-e495
  ];

  boot.initrd.postDeviceCommands = lib.mkAfter ''
    zfs rollback -r zpool/root@blank
  '';

  sops.defaultSopsFile = ../../../secrets/arwen/secrets.yaml;
  sops.gnupg.sshKeyPaths = ["/persist/etc/ssh/ssh_host_rsa_key"];
  sops.age.sshKeyPaths = ["/persist/etc/ssh/ssh_host_ed25519_key"];
  sops.secrets.rootPwd.neededForUsers = true;
  users.users.root.hashedPasswordFile = config.sops.secrets.rootPwd.path;

  networking.hostId = "d2a2e2cb";
  networking.networkmanager.enable = true;

  time.timeZone = "Europe/Helsinki";

  services.xserver.xkb.layout = "us";

  roles.audio.enable = true;
  roles.bluetooth = {
    enable = true;
    enableHDAudio = true;
  };

  services.libinput.enable = true;

  environment.systemPackages = with pkgs; [
    inputs.nvim-flake.packages.x86_64-linux.nvim
    git
    vim
    wget
  ];

  environment.persistence."/persist" = {
    hideMounts = true;
    directories = [
      "/etc/nixos"
      "/etc/ssh"
      "/var/lib/tailscale"
    ];
  };

  services.pcscd.enable = true;
  programs.gnupg.agent.enable = true;

  services.openssh.enable = true;

  system.stateVersion = "24.05";
}

A  => systems/hosts/arwen/hardware-configuration.nix +60 -0
@@ 1,60 @@
{
  config,
  lib,
  pkgs,
  modulesPath,
  ...
}: {
  imports = [
    (modulesPath + "/installer/scan/not-detected.nix")
  ];

  boot.loader.systemd-boot.enable = true;
  boot.loader.systemd-boot.configurationLimit = 9;
  boot.loader.efi.canTouchEfiVariables = true;

  boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "usb_storage" "sd_mod" "sdhci_pci"];
  boot.initrd.kernelModules = ["zfs"];
  boot.kernelModules = ["kvm-amd"];
  boot.extraModulePackages = [];
  boot.supportedFilesystems = ["zfs"];

  fileSystems."/" = {
    device = "zpool/root";
    fsType = "zfs";
    neededForBoot = true;
  };

  fileSystems."/home" = {
    device = "zpool/home";
    fsType = "zfs";
    neededForBoot = true;
  };

  fileSystems."/nix" = {
    device = "zpool/nix";
    fsType = "zfs";
    neededForBoot = true;
  };

  fileSystems."/persist" = {
    device = "zpool/persist";
    fsType = "zfs";
    neededForBoot = true;
  };

  fileSystems."/boot" = {
    device = "/dev/disk/by-uuid/27D2-24CF";
    fsType = "vfat";
    options = ["fmask=0022" "dmask=0022"];
  };

  swapDevices = [
    {device = "/dev/disk/by-uuid/87589f56-9eb4-43d2-ade7-ccdab1e56cc2";}
  ];

  networking.useDHCP = lib.mkDefault true;

  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
  hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

A  => systems/hosts/default.nix +7 -0
@@ 1,7 @@
{laptop, ...}: {
  arwen = {
    system = "x86_64-linux";
    profile = laptop;
    modules = [];
  };
}

A  => systems/profiles/default.nix +3 -0
@@ 1,3 @@
inputs: {
  laptop = import ./laptop inputs;
}

A  => systems/profiles/laptop/default.nix +18 -0
@@ 1,18 @@
inputs @ {
  home-manager,
  impermanence,
  sops-nix,
  ...
}: {
  modules = [
    sops-nix.nixosModules.sops
    impermanence.nixosModules.impermanence
    home-manager.nixosModules.home-manager

    ../../../roles
    ../../../users
  ];
  specialArgs = {
    inherit inputs;
  };
}

A  => users/default.nix +3 -0
@@ 1,3 @@
{
  imports = [./skye];
}

A  => users/skye/default.nix +25 -0
@@ 1,25 @@
{config, ...}: {
  sops.secrets.skyePwd.neededForUsers = true;

  roles.base = {
    username = "skye";
    isWheel = true;
    hashedPasswordFile = config.sops.secrets.skyePwd.path;
  };

  roles.git = {
    enable = true;
    enableLazygit = true;
    email = "jonni@liljamo.com";
    name = "Jonni Liljamo";
    gitExtraConfig = ''
      [sendemail]
          smtpserver = "smtp.migadu.com"
          smtpuser = "jonni@liljamo.com"
          smtpencryption = "ssl"
          smtpserverport = 465
    '';
  };

  roles.zellij.enable = true;
}