Framework 12 Initial setup

This commit is contained in:
Aleksandr Lebedev 2025-07-13 20:37:21 +02:00
parent af5b392286
commit 3d0fdb6ac4
9 changed files with 294 additions and 9 deletions

View file

@ -0,0 +1,82 @@
{
device ? throw "Set this to your disk device, e.g. /dev/sda",
...
}:
{
disko.devices = {
disk = {
main = {
type = "disk";
device = device;
content = {
type = "gpt";
partitions = {
ESP = {
label = "boot";
name = "ESP";
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"defaults"
];
};
};
luks = {
size = "100%";
label = "luks";
content = {
type = "luks";
name = "cryptroot";
extraOpenArgs = [
"--allow-discards"
"--perf-no_read_workqueue"
"--perf-no_write_workqueue"
];
# https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html
settings = {crypttabExtraOpts = ["fido2-device=auto" "token-timeout=10"];};
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/persist";
};
};
};
};
};
};
};
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [ "defaults" "size=8G" "mode=755" ];
};
};
};
fileSystems."/persist" = {
depends = [ "/" ];
neededForBoot = true;
};
fileSystems."/nix" = {
device = "/persist/nix";
options = [ "bind" ];
depends = [ "/persist" ];
neededForBoot = true;
};
fileSystems."/tmp" = {
device = "/persist/tmp";
options = [ "bind" ];
depends = [ "/persist" ];
neededForBoot = true;
};
swapDevices = [{
device = "/persist/swapfile";
size = 64*1024; # 64 GB
}];
boot.resumeDevice = "/persist/swapfile";
}

17
flake.lock generated
View file

@ -1119,6 +1119,22 @@
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1752048960,
"narHash": "sha256-gATnkOe37eeVwKKYCsL+OnS2gU4MmLuZFzzWCtaKLI8=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "7ced9122cff2163c6a0212b8d1ec8c33a1660806",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixos-wsl": {
"inputs": {
"flake-compat": "flake-compat_5",
@ -3699,6 +3715,7 @@
"nix-gaming": "nix-gaming",
"nix-on-droid": "nix-on-droid",
"nixos-facter-modules": "nixos-facter-modules",
"nixos-hardware": "nixos-hardware",
"nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs_12",
"nixpkgs-master": "nixpkgs-master",

View file

@ -69,6 +69,7 @@
niri-flake = {
url = "github:sodiboo/niri-flake";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
};
outputs = {
@ -137,6 +138,16 @@
allowUnfree = true;
};
};
kylekrein-framework12-pkgs = nixpkgs: import nixpkgs {
system = x86;
overlays = [
inputs.beeengine.overlays.${x86}
];
config = {
allowBroken = true;
allowUnfree = true;
};
};
kylekrein-mac-pkgs = nixpkgs: import nixpkgs {
system = arm;
overlays = [
@ -201,6 +212,7 @@
hwconfig = {
hostname = "kylekrein-homepc";
isLaptop = false;
hasTouchscreen = false;
system = x86;
useImpermanence = true;
};
@ -216,11 +228,34 @@
./nixos/configuration.nix
];
};
"kylekrein-framework12" = nixpkgs.lib.nixosSystem {
specialArgs = {
hwconfig = {
hostname = "kylekrein-framework12";
isLaptop = true;
hasTouchscreen = true;
system = x86;
useImpermanence = true;
};
inherit first-nixos-install;
inherit inputs;
unstable-pkgs = kylekrein-framework12-pkgs nixpkgs-unstable;
};
system = x86;
pkgs = kylekrein-framework12-pkgs nixpkgs;
modules = [
(import ./disko/impermanence-tmpfs-luks.nix {device = "/dev/nvme0n1";})
./nixos/configuration.nix
inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel
];
};
"kylekrein-mac" = nixpkgs.lib.nixosSystem {
specialArgs = {
hwconfig = {
hostname = "kylekrein-mac";
isLaptop = true;
hasTouchscreen = false;
system = arm;
useImpermanence = true;
};
@ -240,6 +275,7 @@
hwconfig = {
hostname = "kylekrein-server";
isLaptop = false;
hasTouchscreen = false;
system = x86;
useImpermanence = false;
};
@ -259,6 +295,7 @@
hwconfig = {
hostname = "kylekrein-wsl";
isLaptop = true;
hasTouchscreen = false;
system = x86;
useImpermanence = false;
};
@ -279,6 +316,7 @@
hwconfig = {
hostname = "andrej-pc";
isLaptop = false;
hasTouchscreen = false;
system = x86;
useImpermanence = false;
};

View file

@ -0,0 +1,48 @@
/*
distancethreshold: Minimum cutoff for a gestures to take effect
degreesleniency: Offset degrees within which gesture is recognized (max=45)
timeoutms: Maximum duration for a gesture to take place in miliseconds
orientation: Number of 90 degree turns to shift gestures by
verbose: 1=enabled, 0=disabled; helpful for debugging
device: Path to the /dev/ filesystem device events should be read from
gestures: Array of gestures; binds num of fingers / gesturetypes to commands
Supported gestures: SwipeLR, SwipeRL, SwipeDU, SwipeUD,
SwipeDLUR, SwipeURDL, SwipeDRUL, SwipeULDR
*/
unsigned int distancethreshold = 125;
unsigned int distancethreshold_pressed = 60;
unsigned int degreesleniency = 15;
unsigned int timeoutms = 800;
unsigned int orientation = 0;
unsigned int verbose = 0;
double edgesizeleft = 50.0;
double edgesizetop = 50.0;
double edgesizeright = 50.0;
double edgesizebottom = 50.0;
double edgessizecaling = 1.0;
char *device = "/dev/input/touchscreen";
//Gestures can also be specified interactively from the command line using -g
Gesture gestures[] = {
/* nfingers gesturetype command */
//{1, SwipeLR, EdgeAny, DistanceAny, ActModeReleased, "niri msg action "},
//{1, SwipeRL, EdgeAny, DistanceAny, ActModeReleased,
// "xdotool key --clearmodifiers Alt+Shift+r"},
//{1, SwipeDLUR, EdgeAny, DistanceAny, ActModeReleased, "sxmo_vol.sh up"},
//{1, SwipeURDL, EdgeAny, DistanceAny, ActModeReleased, "sxmo_vol.sh down"},
//{1, SwipeDRUL, EdgeAny, DistanceAny, ActModeReleased,
// "sxmo_brightness.sh up"},
//{1, SwipeULDR, EdgeAny, DistanceAny, ActModeReleased,
//"sxmo_brightness.sh down"},
//{2, SwipeLR, EdgeAny, DistanceAny, ActModeReleased,
// "xdotool key --clearmodifiers Alt+e"},
//{2, SwipeRL, EdgeAny, DistanceAny, ActModeReleased,
// "xdotool key --clearmodifiers Alt+r"},
{2, SwipeDU, EdgeAny, DistanceAny, ActModeReleased,
"pidof wvkbd-mobintl || wvkbd-mobintl -l simple,special,emoji &"},
{2, SwipeUD, EdgeAny, DistanceAny, ActModeReleased,
"pkill -9 -f wvkbd-mobintl"},
{3, SwipeDU, EdgeAny, DistanceAny, ActModeReleased,
"niri msg action toggle-overview"},
};

View file

@ -0,0 +1,2 @@
{ pkgs }:
pkgs.lisgd.override { conf = ./lisgd-config.h; }

View file

@ -24,7 +24,9 @@
libnotify
hyprlock
networkmanagerapplet
];
] ++ lib.optionals (hwconfig.hasTouchscreen) (with pkgs;[
wvkbd # https://github.com/jjsullivan5196/wvkbd
]);
programs.niri = {
settings = {
outputs = lib.mkIf (hwconfig.hostname == "kylekrein-homepc") {
@ -47,8 +49,14 @@
"25%"
];
};
touchscreen-gestures = lib.mkIf (hwconfig.hasTouchscreen) {
command = [
"${lib.getExe (import ./lisgd.nix { inherit pkgs; })}" #https://git.sr.ht/~mil/lisgd
];
};
in [
set-low-brightness
touchscreen-gestures
{
command = [
"${lib.getExe pkgs.networkmanagerapplet}"

View file

@ -0,0 +1,93 @@
{
options,
config,
pkgs,
unstable-pkgs,
lib,
hwconfig,
inputs,
...
}: {
imports = [
../../hardware/nvidia
../../modules/niri
../../modules/libvirt
../../users/kylekrein
(import ../../modules/libvirt/user.nix {username = "kylekrein";})
../../users/tania
];
sops.secrets."ssh_keys/${hwconfig.hostname}" = {};
facter.reportPath = lib.mkForce null;
nixpkgs.overlays = [
# Fixes java crash because of bind mount with impermanence when loading too many mods(ex. All The Mods 9)
(self: super: {
prismlauncher = pkgs.symlinkJoin {
name = "prismlauncher";
paths = [ super.prismlauncher];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/prismlauncher --set HOME /persist/home/kylekrein
'';
};
})
(self: super: {
bottles = pkgs.symlinkJoin {
name = "bottles";
paths = [ super.bottles];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/bottles --set HOME /persist/home/kylekrein
'';
};
})
];
environment.systemPackages = with pkgs; [
blender
ladybird
prismlauncher
#inputs.nix-gaming.packages.${pkgs.system}.star-citizen
];
zramSwap = {
enable = true; # Hopefully? helps with freezing when using swap
};
services.zerotierone = {
enable = true;
port = 9994;
joinNetworks = [
"A84AC5C10AD269CA"
"db64858fed285e0f"
];
};
#LLMs
services.ollama = {
enable = true;
loadModels = [ "qwq" "llama3.1" "qwen2.5-coder:7b" ];
acceleration = "cuda";
home = "/persist/ollama";
user = "ollama";
group = "ollama";
};
boot.binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" ];
services.open-webui.enable = true;
#services.open-webui.package = unstable-pkgs.open-webui;
services.open-webui.openFirewall = false;
services.open-webui.host = "0.0.0.0";
services.open-webui.stateDir = "/persist/open-webui";
systemd.services.open-webui.serviceConfig.User = "ollama";
systemd.services.open-webui.serviceConfig.Group = "ollama";
systemd.services.open-webui.serviceConfig.DynamicUser = lib.mkForce false;
#Chat host
networking.firewall.allowedTCPPorts = [ 80 443 22 8448 9993 8081] ++ [ config.services.zerotierone.port ];
networking.firewall.allowedUDPPorts = [config.services.zerotierone.port];
systemd.network.wait-online.enable = lib.mkForce false;
}

View file

@ -5,6 +5,7 @@ users:
ssh_keys:
kylekrein-mac: ENC[AES256_GCM,data:Gnh34OQWO6eQfNfyYZsVfvktknmZorQYF+lNMKYvV7XkKjZ3RQNHyJ3UWOX+sVwWdtF7EboXkBPdHvnyLvDVIyv7trxTU5IXQzOI+34AKfPHa828HuOLk0AclCmm6GcNq/X4dKTX5DADG4cE4/V+KtdjvSMtLX7I1cjlfsN7JzcsnjERbK8Q0pTMuA44IUdnh0odH9xFEP/f/hVZZZhc5vrMfAqSx3lQxCF62c0wJaorobsPSM7BTzorVgnMnc3zJRAlgQnCnAe306/6g4hurBteIVeGFhA8gSk1fjZh2fm0opo/lgvHRJOwfpvRWJGEedx7hEpjsDr8BRxeBc2OHaRO5UP+fYh8Qtki8ZeFUjr/psjRRz128Kr0C+NS0AByZtwg54d705uwsnf79jPdM1ewGryCcsxqYWCvT0174cIg3sLdQvPnESbV1zU+QsVskFZwYL+gLtzuAwExPW7cM12M/HS+Eb5xtWvRA46FZ/dnKFwQkUA/VgSi08eC5/EYg8dFBht9hDK+kiLPGHML8A6a3CoiMf0pd+DbdOxA21F0Tw==,iv:oEXxrvWosuiH2wSoSkP7YMwBQu3JKIhn/YeiaTL/UT4=,tag:XgBw2q/6LPWg2zuOC9Wb+w==,type:str]
kylekrein-homepc: ENC[AES256_GCM,data:/7b7wHk9jX+2Gel3157KO4YHia+IyEurUic0BX9flNKdsjIyG/3N8lORAkIjwnPlFaN2VqGu6o1pFgW2dzkSAyATQIUeWpqL5rjxsG3mJ9/9TLh58Y7MIpFKx2r8AeUY0xEAhT1A4BCbnDMsneQtM9gBkgPdhhv6vVpe4XJS3n+dGPER/bQxxRbEt260EjxvL1OPf5C7Z7qNVhOzxNdgdJMQvXxyhRGlXRrrHFRdbw0nChStevgBL4+FoMuBFkqF/aJSoapwe8PNxp8z+Hk5Em+BQv/ieFcscESssCK1gSbvfz6MQyX+5ig+Gy+t28yy56/ir44PHwX47IOILzg7lABSvN+Uyt+sRKyBfx124hJjqgXf65YQ/fgknQt0NDKwZyP/gPSLC9HiLKdva/P9nuenfSnlLrGtfugejBAVQBMOP2HTp/ZKtveeKLVIzM7NLeHAw8ul1OL8OlOgyO3vhEkEVagLwtQYHqwoF7+z30TzTtGyDzuhohbhUH36D8BD/LTaPHxnnVIzWq/IBOmAU06U/EvS5x/JJtqMm8aaDFFEYA==,iv:+4umMhsr8s0IuiYuEdhDAOfLjAELEHbFVvWqaVyF2yQ=,tag:eE9gCZ3pC4wDLeMs5cQGZg==,type:str]
kylekrein-framework12: ENC[AES256_GCM,data:I9gMFXcLUd4xLUWcrvp2eYcMgkG48dmiRjobnSa2Emtq2dqK/H31KLkTuk6PQvY71YbwG41tdqYsFqKTQTxf7d7toDfnfuXxPUbI2dc2ps2LhpPJb9wTUKRgHtJNwPpMjQ5s7lumG9wltWhT1xMSZvthq1LBcgL4iYYmePLef0TBvExnkRohqn32H64RILhX2VrI8gAWoYU7PglbG3J4tyUH1+zB2t8G8MrEDTMjMIbXmP3tALFiGl/AeSRrvZaCLnm7I3bgkhWJIic2ZXsbEknR5to5jhSI99Tdm4U5R+HyX1LCWr55jxmMdafvdqQlaTeTrv8fu3e4k7rEVkT2XzLnChG3MOUskNLbTcKscHiilCkrFMwp7Qo2EgQIj4VxKqrr0Dp+xj1PPl0q7bTAejR1ijpdOIlpn+PE7A6mBoIMMUcUu2hApe/eWqEUpHs6jKU9r6w+k8+O7IcwHGS1KgAzTAGPjiDZeWVPdUdanC+p4lp6sqjf4+ZaFbinGZfWpCX8pIv3Yzszc4+8j7PTQtX9GkQDVP7HXUyZS+SOH/169A==,iv:dF5+s+26zmoy0fR72P+pvPikshPtqLYewMCrieRJWaQ=,tag:R4/9xHLmOLkDqZnXClSKIA==,type:str]
services:
conduwuit: ENC[AES256_GCM,data:1shEq67QJTkeqrfYSr/eYG7gYWH//5ey6XQ=,iv:hy5wQmue8qU4ALfn9BrNQLnsTk8BsVVXY/8bDj18mXk=,tag:h6+hL0HjgSzd15Kc7Zg4ng==,type:str]
gitlab:
@ -18,10 +19,6 @@ services:
activeRecordDeterministicKey: ENC[AES256_GCM,data:pJBZAL60XeCrW7CPx76WcWpsYOwlR4OWmIP/61vNL3k=,iv:t/YmnVFge6kLiQjXD6RKNn7r5Oy1Aeyi3ZIaP57Nhig=,tag:L4aU4h4KdbsSNDpgybaV3g==,type:str]
oidcKeyBase: ENC[AES256_GCM,data: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,iv:P8C/7NUd1G/VbKz7iWjTVXxMFOxZQxX5d0V4Tj6KeCw=,tag:iq4s3ahqkmf4e7BffjlIcQ==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1l8euy4w4nccrpdmfdfct468parcrulkqcts2jcljajs2as0k7passdv2x4
enc: |
@ -32,8 +29,7 @@ sops:
M0hSNWNYbGM3a21McUVMaGNqWTdmNTQK3VRFV4EaC8K8AJi2PUt6TeBgueEmPLI8
Vdwwbh89+xD5xf4Zm0LctPRlxxM6diubv0gIZZPy/ZXZfiU32ZnM0w==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-05-22T17:54:01Z"
mac: ENC[AES256_GCM,data:Mh3pp3IQ+dqFaHY5ppptAS5Rgxhgq2V01/hbV+OPseh7kkHSoq78BEDD7O5W7XNW3EHFZO2T1snvmIfdCfMfI4fOovf54a/2H24C3DALf/CfNEPEPQ2kH6SXgfxGWq9tUnZrwPcaUgbAfbVF9TIjhByDSrMYrnBNOxZh9w0AkzE=,iv:WkUIlqW3IV5il4KYv7o/Vm/g4xrE68koxzx0MTayTbc=,tag:qwLOm137Z2xBqlxZLoE1tw==,type:str]
pgp: []
lastmodified: "2025-07-13T17:05:12Z"
mac: ENC[AES256_GCM,data:hRjaoAb6ggQsrhMK5gDkVSqeKV2Mb2Yrmj8WuPM++UhHzCKVG3mE+uK2teTdbzpaU5+so2SJZuUvYRXVf8cK+2/NGz0ACkiWZ+DF0vbp/A0xW7NPZKhh1Uh3Q64ypKqDR4SsVpjn51FVl02/6k3yxi9bYnVzfdZkr6El3n8kzuE=,iv:I0frhCxpQW+tsPVFgOR/svmdrFpG3RXlSBN4OTO8mBw=,tag:4bY5wPuPMrgSkYW66TgAvA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.9.4
version: 3.10.2

View file

@ -22,6 +22,7 @@ in {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGMt3PWVvmEL6a0HHTsxL4KMq1UGKFdzgX5iIkm6owGQ kylekrein@kylekrein-mac"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDdxZ5OyGcfD1JwEa4RWw86HWZ2dKFR0syrRckl7EvG kylekrein@kylekrein-homepc"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA85Vz5ve3aDzgPbnKH6I4FaJQpcu1nRDR+/kBZiQsuZ kylekrein@kylekrein-framework12"
];
};
sops.secrets = {