Compare commits
50
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a196abbb2d | ||
|
|
4ea28e044f | ||
|
|
9c97cd1820 | ||
|
|
1a091092c3 | ||
|
|
06b56c7422 | ||
|
|
a1d0228b0d | ||
|
|
cf9d79d660 | ||
|
|
bdca60700c | ||
|
|
81e665882c | ||
|
|
c1349d4fc7 | ||
|
|
e18601faa5 | ||
|
|
3df4cafe28 | ||
|
|
2745692e8a | ||
|
|
b43adbd161 | ||
|
|
f5f8a9b71b | ||
|
|
14182669e1 | ||
|
|
ffec78a68b | ||
|
|
369d8640cd | ||
|
|
f9ddbedb5f | ||
|
|
7016d1f24c | ||
|
|
70030a70e2 | ||
|
|
7ffde2b6a1 | ||
|
|
bd2ba1f38c | ||
|
|
9a5c1c4e51 | ||
|
|
ffce3398ef | ||
|
|
4dfb1b6ee3 | ||
|
|
1a123348dd | ||
|
|
6a2872f207 | ||
|
|
84d79462d2 | ||
|
|
b4d79e958d | ||
|
|
5b3480529e | ||
|
|
97849952a6 | ||
|
|
f0a304d9db | ||
|
|
2054ee1a7b | ||
|
|
cb920eaefd | ||
|
|
de827013c6 | ||
|
|
ce801ec0a8 | ||
|
|
121f79e048 | ||
|
|
e85156235c | ||
|
|
e89908b592 | ||
|
|
139402db48 | ||
|
|
0bbce5c85e | ||
|
|
3fd5c34aa1 | ||
|
|
a7df51dbb8 | ||
|
|
d89b8b51cc | ||
|
|
6c301d87fd | ||
|
|
4b6c84e63d | ||
|
|
59780f39d0 | ||
|
|
48d784a964 | ||
|
|
76ad137946 |
+1
-1
@@ -1,7 +1,7 @@
|
||||
keys:
|
||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||
- &builder-ssh age1vwanu6jm80jzwe78jzz7z9vuzlg94tl7rpdg34vjmxcrnhddxu9q5zaf49
|
||||
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
|
||||
creation_rules:
|
||||
|
||||
@@ -36,3 +36,11 @@ ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
|
||||
#+begin_src sh
|
||||
sops updatekeys secrets/*
|
||||
#+end_src
|
||||
|
||||
* Installation of builder
|
||||
- Start recent nixos installer in VM
|
||||
- Set password for root
|
||||
|
||||
#+begin_src sh
|
||||
nix run github:nix-community/nixos-anywhere -- --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#builder --target-host root@<ip>
|
||||
#+end_src
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
"binarycache.julian-mutter.de:7RB4Sif4WQU76XWIsRJ2KtKa45zg1QOTHEkUhi/JBe8="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
"noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4="
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# Host hydra
|
||||
{...}: {
|
||||
services.hydra = {
|
||||
enable = true;
|
||||
hydraURL = "http://hydra.julian-mutter.de"; # externally visible URL
|
||||
port = 3000;
|
||||
notificationSender = "hydra@julian-mutter.de"; # e-mail of hydra service
|
||||
# a standalone hydra will require you to unset the buildMachinesFiles list to avoid using a nonexistant /etc/nix/machines
|
||||
# buildMachinesFiles = [ ];
|
||||
# you will probably also want, otherwise *everything* will be built from scratch
|
||||
useSubstitutes = true;
|
||||
|
||||
minimumDiskFree = 5; # in GB
|
||||
minimumDiskFreeEvaluator = 4; # in GB
|
||||
};
|
||||
|
||||
# Uris allowed as flake inputs, otherwise hydra does not fetch them
|
||||
nix.settings.allowed-uris = [
|
||||
"github:"
|
||||
"gitlab:"
|
||||
"git+https://github.com/hyprwm/Hyprland"
|
||||
"https://github.com/hyprwm/Hyprland"
|
||||
"https://github"
|
||||
"https://gitlab"
|
||||
"https://gitlab.julian-mutter.de"
|
||||
"git+https://gitlab.julian-mutter.de"
|
||||
];
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedProxySettings = true;
|
||||
# recommendedTlsSettings = true;
|
||||
# other Nginx options
|
||||
virtualHosts."hydra.julian-mutter.de" = {
|
||||
# enableACME = true;
|
||||
# forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:3000";
|
||||
# proxyWebsockets = true; # needed if you need to use WebSocket
|
||||
# extraConfig =
|
||||
# # required when the target is also TLS server with multiple hosts
|
||||
# "proxy_ssl_server_name on;" +
|
||||
# # required when the server wants to use HTTP Authentication
|
||||
# "proxy_pass_header Authorization;"
|
||||
# ;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# Setup the device as a jenkins agent
|
||||
{pkgs, ...}: {
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
# require public key authentication for better security
|
||||
settings.PasswordAuthentication = false;
|
||||
settings.KbdInteractiveAuthentication = false;
|
||||
settings.PermitRootLogin = "yes";
|
||||
# Add older algorithms for jenkins ssh-agents-plugin to be compatible
|
||||
settings.Macs = [
|
||||
"hmac-sha2-512-etm@openssh.com"
|
||||
"hmac-sha2-256-etm@openssh.com"
|
||||
"umac-128-etm@openssh.com"
|
||||
"hmac-sha2-512"
|
||||
"hmac-sha2-256"
|
||||
"umac-128@openssh.com"
|
||||
];
|
||||
settings.KexAlgorithms = [
|
||||
"diffie-hellman-group-exchange-sha1"
|
||||
"diffie-hellman-group14-sha1"
|
||||
"mlkem768x25519-sha256"
|
||||
"sntrup761x25519-sha512"
|
||||
"sntrup761x25519-sha512@openssh.com"
|
||||
"curve25519-sha256"
|
||||
"curve25519-sha256@libssh.org"
|
||||
"diffie-hellman-group-exchange-sha256"
|
||||
];
|
||||
};
|
||||
|
||||
users.users.jenkins = {
|
||||
createHome = true;
|
||||
home = "/var/lib/jenkins";
|
||||
group = "jenkins";
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ36sQhVz3kUEi8754G7r3rboihhG4iqFK/UvQm6SING jenkins@home"
|
||||
];
|
||||
packages = with pkgs; [
|
||||
git
|
||||
devenv
|
||||
];
|
||||
extraGroups = [
|
||||
"docker"
|
||||
];
|
||||
};
|
||||
|
||||
users.groups.jenkins = {};
|
||||
programs.java = {
|
||||
enable = true;
|
||||
package = pkgs.jdk21; # Same as jenkins version on home
|
||||
};
|
||||
}
|
||||
Generated
+735
-138
File diff suppressed because it is too large
Load Diff
@@ -60,8 +60,12 @@
|
||||
wf-recorder
|
||||
wl-clipboard
|
||||
|
||||
(pkgs.writeShellScriptBin "toggle-screen-mirroring" (
|
||||
builtins.readFile ./toggle-screen-mirroring.sh
|
||||
(pkgs.writeShellScriptBin "toggle-screen-mirroring"
|
||||
(
|
||||
builtins.replaceStrings
|
||||
["@INTERNAL_MONITOR@" "@EXTERNAL_MONITOR@"]
|
||||
[(builtins.elemAt config.monitors 0).name (builtins.elemAt config.monitors 1).name]
|
||||
(builtins.readFile ./toggle-screen-mirroring.sh)
|
||||
))
|
||||
|
||||
(pkgs.writeShellScriptBin "correct-workspace-locations" (
|
||||
@@ -108,6 +112,15 @@
|
||||
''
|
||||
+ "-- Main config from `hyprland.lua`\n"
|
||||
+ builtins.readFile ./hyprland.lua
|
||||
+ "-- Monitor config\n"
|
||||
+ lib.concatStringsSep "\n" (
|
||||
map (
|
||||
monitor: "hl.monitor({ output = \"${monitor.name}\", mode = \"preferred\", position = \"auto\", scale = \"auto\", mirror = \"\"})"
|
||||
)
|
||||
config.monitors
|
||||
)
|
||||
+ "\n-- For plugging in random monitors\n"
|
||||
+ "hl.monitor({ output = \"\", mode = \"preferred\", position = \"auto\", scale = \"auto\", mirror = \"\"})\n"
|
||||
+ "-- Assign workspaces to monitors\n"
|
||||
+ lib.concatStringsSep "\n" (
|
||||
builtins.concatLists (
|
||||
|
||||
@@ -1,16 +1,3 @@
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
mirror = "",
|
||||
})
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
@@ -2,11 +2,10 @@
|
||||
|
||||
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
|
||||
|
||||
# TODO: Detect these instead of hardcoding them
|
||||
INTERNAL_MONITOR="eDP-1"
|
||||
EXTERNAL_MONITOR="HDMI-A-1"
|
||||
INTERNAL_MONITOR="@INTERNAL_MONITOR@"
|
||||
EXTERNAL_MONITOR="@EXTERNAL_MONITOR@"
|
||||
|
||||
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .mirrorOf')
|
||||
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r --arg EXTERNAL "$EXTERNAL_MONITOR" '.[] | select(.name == $EXTERNAL) | .mirrorOf')
|
||||
|
||||
echo "current setting: "
|
||||
echo $MIRROR_SETTING
|
||||
|
||||
+41
-183
@@ -4,10 +4,16 @@
|
||||
{
|
||||
pwd,
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
outputs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
imports =
|
||||
[
|
||||
inputs.disko.nixosModules.disko
|
||||
|
||||
./disko.nix
|
||||
./hardware-configuration.nix
|
||||
|
||||
"${pwd}/features-nixos/global/fish.nix" # fish for admin
|
||||
@@ -15,7 +21,20 @@
|
||||
"${pwd}/features-nixos/global/nix.nix"
|
||||
"${pwd}/features-nixos/global/sops.nix"
|
||||
"${pwd}/features-nixos/global/root.nix"
|
||||
];
|
||||
|
||||
# "${pwd}/features-nixos/optional/hydra.nix"
|
||||
# "${pwd}/features-nixos/optional/jenkins-agent.nix"
|
||||
]
|
||||
++ (builtins.attrValues outputs.nixosModules);
|
||||
|
||||
frajul.gitlab-runner = {
|
||||
enable = false;
|
||||
secretsFile = ./secrets.yaml;
|
||||
};
|
||||
frajul.gitea-runner = {
|
||||
enable = true;
|
||||
secretsFile = ./secrets.yaml;
|
||||
};
|
||||
|
||||
networking.hostName = "builder";
|
||||
system.stateVersion = "23.11";
|
||||
@@ -66,22 +85,22 @@
|
||||
fallback = true;
|
||||
};
|
||||
|
||||
# system.autoUpgrade = {
|
||||
# enable = true;
|
||||
# flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
|
||||
# flags = [
|
||||
# "--recreate-lock-file" # update lock file
|
||||
# ];
|
||||
# dates = "02:13";
|
||||
# };
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
|
||||
flags = [
|
||||
"--recreate-lock-file" # update lock file
|
||||
];
|
||||
dates = "02:13";
|
||||
};
|
||||
|
||||
# optimize store by hardlinking store files
|
||||
nix.optimise.automatic = true;
|
||||
nix.optimise.dates = ["03:15"];
|
||||
nix.optimise.automatic = lib.mkForce true;
|
||||
nix.optimise.dates = lib.mkForce ["03:15"];
|
||||
|
||||
# nix.gc.automatic = true;
|
||||
# nix.gc.dates = "daily";
|
||||
# nix.gc.options = "--delete-old";
|
||||
nix.gc.automatic = lib.mkForce true;
|
||||
nix.gc.dates = lib.mkForce "daily";
|
||||
nix.gc.options = lib.mkForce "--delete-old";
|
||||
|
||||
# nix.settings.keep-derivations = false;
|
||||
# nix.settings.keep-outputs = true;
|
||||
@@ -101,55 +120,12 @@
|
||||
OOMScoreAdjust = 500;
|
||||
};
|
||||
|
||||
# Ollama used by open-webui as llm backend
|
||||
# services.ollama = {
|
||||
# enable = true;
|
||||
# # acceleration = "rocm";
|
||||
# openFirewall = true;
|
||||
# };
|
||||
|
||||
# services.nextjs-ollama-llm-ui = {
|
||||
# enable = true;
|
||||
# hostname = "192.168.3.118";
|
||||
# port = 3001;
|
||||
# };
|
||||
# services.open-webui = {
|
||||
# enable = true;
|
||||
# port = 8080;
|
||||
# openFirewall = true;
|
||||
# host = "builder.julian-mutter.de";
|
||||
# };
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
3001 # ollama-ui
|
||||
];
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
# require public key authentication for better security
|
||||
settings.PasswordAuthentication = false;
|
||||
settings.KbdInteractiveAuthentication = false;
|
||||
settings.PermitRootLogin = "yes";
|
||||
# Add older algorithms for jenkins ssh-agents-plugin to be compatible
|
||||
settings.Macs = [
|
||||
"hmac-sha2-512-etm@openssh.com"
|
||||
"hmac-sha2-256-etm@openssh.com"
|
||||
"umac-128-etm@openssh.com"
|
||||
"hmac-sha2-512"
|
||||
"hmac-sha2-256"
|
||||
"umac-128@openssh.com"
|
||||
];
|
||||
settings.KexAlgorithms = [
|
||||
"diffie-hellman-group-exchange-sha1"
|
||||
"diffie-hellman-group14-sha1"
|
||||
"mlkem768x25519-sha256"
|
||||
"sntrup761x25519-sha512"
|
||||
"sntrup761x25519-sha512@openssh.com"
|
||||
"curve25519-sha256"
|
||||
"curve25519-sha256@libssh.org"
|
||||
"diffie-hellman-group-exchange-sha256"
|
||||
];
|
||||
};
|
||||
users.users."root".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi"
|
||||
@@ -163,20 +139,6 @@
|
||||
|
||||
# security.pam.sshAgentAuth.enable = true; # enable sudo via ssh
|
||||
|
||||
services.hydra = {
|
||||
enable = true;
|
||||
hydraURL = "http://hydra.julian-mutter.de"; # externally visible URL
|
||||
port = 3000;
|
||||
notificationSender = "hydra@julian-mutter.de"; # e-mail of hydra service
|
||||
# a standalone hydra will require you to unset the buildMachinesFiles list to avoid using a nonexistant /etc/nix/machines
|
||||
# buildMachinesFiles = [ ];
|
||||
# you will probably also want, otherwise *everything* will be built from scratch
|
||||
useSubstitutes = true;
|
||||
|
||||
minimumDiskFree = 5; # in GB
|
||||
minimumDiskFreeEvaluator = 4; # in GB
|
||||
};
|
||||
|
||||
# add builder itpwd as build machine so system emulation is properly supported
|
||||
# nix.distributedBuilds = true;
|
||||
nix.buildMachines = [
|
||||
@@ -199,97 +161,30 @@
|
||||
}
|
||||
];
|
||||
|
||||
# Uris allowed as flake inputs, otherwise hydra does not fetch them
|
||||
nix.settings.allowed-uris = [
|
||||
"github:"
|
||||
"gitlab:"
|
||||
"git+https://github.com/hyprwm/Hyprland"
|
||||
"https://github.com/hyprwm/Hyprland"
|
||||
"https://github"
|
||||
"https://gitlab"
|
||||
"https://gitlab.julian-mutter.de"
|
||||
"git+https://gitlab.julian-mutter.de"
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
];
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedProxySettings = true;
|
||||
# recommendedTlsSettings = true;
|
||||
# other Nginx options
|
||||
virtualHosts."hydra.julian-mutter.de" = {
|
||||
# enableACME = true;
|
||||
# forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:3000";
|
||||
# proxyWebsockets = true; # needed if you need to use WebSocket
|
||||
# extraConfig =
|
||||
# # required when the target is also TLS server with multiple hosts
|
||||
# "proxy_ssl_server_name on;" +
|
||||
# # required when the server wants to use HTTP Authentication
|
||||
# "proxy_pass_header Authorization;"
|
||||
# ;
|
||||
};
|
||||
};
|
||||
|
||||
# nix-serve
|
||||
virtualHosts."binarycache.julian-mutter.de" = {
|
||||
locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
|
||||
};
|
||||
|
||||
# attic
|
||||
clientMaxBodySize = "2G";
|
||||
virtualHosts."cache.julian-mutter.de" = {
|
||||
locations."/".proxyPass = "http://127.0.0.1:8080";
|
||||
};
|
||||
};
|
||||
|
||||
# =========== Gitea actions ==========
|
||||
services.gitea-actions-runner.instances."builder" = {
|
||||
enable = true;
|
||||
url = "https://gitlab.julian-mutter.de";
|
||||
name = "builder";
|
||||
tokenFile = config.sops.secrets."gitea_token".path;
|
||||
labels = [
|
||||
# fake the ubuntu name, because node provides no ubuntu builds
|
||||
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
|
||||
# my custom nix+devenv ci container
|
||||
"nix-ci:docker://gitlab.julian-mutter.de/julian/nix-ci-container:latest"
|
||||
# devenv
|
||||
"devenv:docker://ghcr.io/cachix/devenv/devenv:latest"
|
||||
# provide native execution on the host
|
||||
"nixos:host"
|
||||
];
|
||||
# Packages are intjected into PATH for "nixos:host"
|
||||
hostPackages = with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
nodejs # Required by many standard actions (like actions/checkout)
|
||||
docker
|
||||
devenv
|
||||
wget
|
||||
nix
|
||||
];
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
# TODO: podman fails with: "cannot resolve hostname"
|
||||
# virtualisation.podman = {
|
||||
# enable = true;
|
||||
# dockerCompat = true;
|
||||
# defaultNetwork.settings.dns_enabled = true;
|
||||
# };
|
||||
|
||||
sops.secrets."gitea_token" = {
|
||||
owner = config.users.users.nix.name;
|
||||
sopsFile = ./secrets.yaml;
|
||||
};
|
||||
|
||||
# =========== Binary Cache ==========
|
||||
sops.secrets."nix_serve_key".sopsFile = ./secrets.yaml;
|
||||
services.nix-serve = {
|
||||
enable = true;
|
||||
secretKeyFile = "/var/cache-priv-key.pem";
|
||||
secretKeyFile = config.sops.secrets."nix_serve_key".path;
|
||||
};
|
||||
|
||||
# =========== Binary Cache with attic ==========
|
||||
@@ -327,41 +222,4 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.gitlab-runner.enable = true;
|
||||
# runner for everything else
|
||||
#
|
||||
sops.secrets."gitlab_runner_token".sopsFile = ./secrets.yaml;
|
||||
services.gitlab-runner.services.default = {
|
||||
# File should contain at least these two variables:
|
||||
authenticationTokenConfigFile = config.sops.secrets."gitlab_runner_token".path;
|
||||
dockerImage = "alpine:latest";
|
||||
dockerVolumes = [
|
||||
"/var/run/docker.sock:/var/run/docker.sock"
|
||||
];
|
||||
};
|
||||
|
||||
### Jenkins node
|
||||
users.users.jenkins = {
|
||||
createHome = true;
|
||||
home = "/var/lib/jenkins";
|
||||
group = "jenkins";
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ36sQhVz3kUEi8754G7r3rboihhG4iqFK/UvQm6SING jenkins@home"
|
||||
];
|
||||
packages = with pkgs; [
|
||||
git
|
||||
devenv
|
||||
];
|
||||
extraGroups = [
|
||||
"docker"
|
||||
];
|
||||
};
|
||||
|
||||
users.groups.jenkins = {};
|
||||
programs.java = {
|
||||
enable = true;
|
||||
package = pkgs.jdk21; # Same as jenkins version on home
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# Example to create a bios compatible gpt partition
|
||||
{ lib, ... }:
|
||||
{
|
||||
disko.devices = {
|
||||
disk.disk1 = {
|
||||
device = lib.mkDefault "/dev/sda";
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
boot = {
|
||||
name = "boot";
|
||||
size = "1M";
|
||||
type = "EF02";
|
||||
};
|
||||
esp = {
|
||||
name = "ESP";
|
||||
size = "500M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
name = "root";
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "lvm_pv";
|
||||
vg = "pool";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
lvm_vg = {
|
||||
pool = {
|
||||
type = "lvm_vg";
|
||||
lvs = {
|
||||
root = {
|
||||
size = "100%FREE";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
mountOptions = [
|
||||
"defaults"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -7,43 +7,13 @@
|
||||
"sd_mod"
|
||||
"sr_mod"
|
||||
];
|
||||
# boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support
|
||||
boot.kernelModules = [];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/f088fe8e-bf3d-4a89-98bd-ead9852d381f";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# 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
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.ens18.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
|
||||
# hardware.graphics = {
|
||||
# enable = true;
|
||||
# extraPackages = with pkgs; [
|
||||
# rocmPackages.clr.icd
|
||||
# linuxPackages.amdgpu-pro
|
||||
# ];
|
||||
# };
|
||||
|
||||
# boot.kernelParams = [
|
||||
# "radeon.si_support=0"
|
||||
# "radeon.cik_support=1"
|
||||
# "amdgpu.si_support=0"
|
||||
# "amdgpu.cik_support=1"
|
||||
# ];
|
||||
# boot.extraModulePackages = with config.boot.kernelPackages; [ amdgpu-pro ];
|
||||
# boot.blacklistedKernelModules = [ "radeon" ];
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
# Emulated systems used as alternative to cross-compiling
|
||||
boot.binfmt.emulatedSystems = ["aarch64-linux"];
|
||||
|
||||
+15
-14
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINgH+4xJMk4K5uBIq4hKwar4wt6GYCRE3Z2S4HETc4TK root@builder
|
||||
@@ -11,7 +11,7 @@
|
||||
"${pwd}/features-nixos/users/wolfi"
|
||||
"${pwd}/features-nixos/optional/binarycaches.nix"
|
||||
|
||||
"${pwd}/features-nixos/optional/remote-builder.nix"
|
||||
# "${pwd}/features-nixos/optional/remote-builder.nix"
|
||||
"${pwd}/features-nixos/optional/boot-efi.nix"
|
||||
|
||||
"${pwd}/features-nixos/optional/greetd.nix"
|
||||
|
||||
@@ -3,4 +3,6 @@
|
||||
syncthing = import ./syncthing.nix;
|
||||
frajulAutoUpgrade = import ./frajul-auto-upgrade.nix;
|
||||
pianoLEDVisualizer = import ./piano-led-visualizer.nix;
|
||||
gitea-runner = import ./gitea-runner.nix;
|
||||
gitlab-runner = import ./gitlab-runner.nix;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.frajul.gitea-runner;
|
||||
in {
|
||||
options = {
|
||||
frajul.gitea-runner = {
|
||||
enable = lib.mkEnableOption "gitea-runner";
|
||||
secretsFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = "A sops encrpyted file containing a 'gitea_token' secret";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
sops.secrets."gitea_token" = {
|
||||
owner = config.users.users.nix.name;
|
||||
sopsFile = cfg.secretsFile;
|
||||
};
|
||||
|
||||
services.gitea-actions-runner.instances."builder" = {
|
||||
enable = true;
|
||||
url = "https://gitlab.julian-mutter.de";
|
||||
name = "builder";
|
||||
tokenFile = config.sops.secrets."gitea_token".path;
|
||||
labels = [
|
||||
# fake the ubuntu name, because node provides no ubuntu builds
|
||||
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
|
||||
# my custom nix+devenv ci container
|
||||
"nix-ci:docker://gitlab.julian-mutter.de/julian/nix-ci-container:latest"
|
||||
# devenv
|
||||
"devenv:docker://ghcr.io/cachix/devenv/devenv:latest"
|
||||
# provide native execution on the host
|
||||
"nixos:host"
|
||||
];
|
||||
# Packages are intjected into PATH for "nixos:host"
|
||||
hostPackages = with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
nodejs # Required by many standard actions (like actions/checkout)
|
||||
docker
|
||||
devenv
|
||||
wget
|
||||
nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.frajul.gitlab-runner;
|
||||
in {
|
||||
options = {
|
||||
frajul.gitlab-runner = {
|
||||
enable = lib.mkEnableOption "gitlab-runner";
|
||||
secretsFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = "A sops encrpyted file containing a 'gitlab_runner_token' secret";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.gitlab-runner.enable = true;
|
||||
|
||||
sops.secrets."gitlab_runner_token".sopsFile = cfg.secretsFile;
|
||||
services.gitlab-runner.services.default = {
|
||||
# File should contain at least these two variables:
|
||||
authenticationTokenConfigFile = config.sops.secrets."gitlab_runner_token".path;
|
||||
dockerImage = "alpine:latest";
|
||||
dockerVolumes = [
|
||||
"/var/run/docker.sock:/var/run/docker.sock"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user