snowfall migration wip framework12 config

This commit is contained in:
Aleksandr Lebedev 2025-08-09 22:44:28 +02:00
parent aaf4ff29c4
commit 0994847b4e
10 changed files with 3860 additions and 60 deletions

108
flake.lock generated
View file

@ -196,11 +196,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1754215849, "lastModified": 1754712381,
"narHash": "sha256-GHTc3TlGSJ1DsPujJHRlNQOgBeotW+RPY9fcc6d4bRs=", "narHash": "sha256-LbTalQDguSZ5xpfFihCEHMjm7xYF+QLQlHFfFTHpkj8=",
"owner": "chaotic-cx", "owner": "chaotic-cx",
"repo": "nyx", "repo": "nyx",
"rev": "8456c9ee811787540b33890120476a7ea8de0ec0", "rev": "9c8c4ed6fab07590095105cb5bea98587955b3c4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1037,11 +1037,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754174776, "lastModified": 1754613544,
"narHash": "sha256-Sp3FRM6xNwNtGzYH/HByjzJYHSQvwsW+lDMMZNF43PQ=", "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "e6e2f43a62b7dbc8aa8b1adb7101b0d8b9395445", "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1095,11 +1095,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754110197, "lastModified": 1754639028,
"narHash": "sha256-N7GWK2084EsNdwzwg6FCIgMrSau1WwzxGSNdPHx5Tak=", "narHash": "sha256-w1+XzPBAZPbeGLMAgAlOjIquswo6Q42PMep9KSrRzOA=",
"owner": "Jovian-Experiments", "owner": "Jovian-Experiments",
"repo": "Jovian-NixOS", "repo": "Jovian-NixOS",
"rev": "04ce5c103eb621220d69102bc0ee27c3abd89204", "rev": "d49809278138d17be77ab0ef5506b26dc477fa62",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1166,11 +1166,11 @@
}, },
"master": { "master": {
"locked": { "locked": {
"lastModified": 1754742265, "lastModified": 1754762869,
"narHash": "sha256-fK5QWs+Z0MaORZKHITj0xHjQrxDp4+z1w5W5gw5TmkY=", "narHash": "sha256-HMadV2f7wphTYk3CM5+g4Gkyfsiv76X4VJbAdQM6mg0=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9114a7402bc71dd710b3b62ae7e6e915e658a08a", "rev": "e3d9d8410cfcdf8f34cff4e0c46b4831b0145780",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1254,11 +1254,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1754300604, "lastModified": 1754744872,
"narHash": "sha256-aefCE3h7XYwl5DexqR3wJIBSuZ4ikNiw9KbyLpm3qUE=", "narHash": "sha256-rcMHMs+dFWaDXev092gfxTfxHEWcUY/6SRV+cseNevQ=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "02834fa6f0f2a2164205923b2dca75299eae2ca5", "rev": "346fc31bcc4d2dbcc3e8ce8dbb622e4255ff54b7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1287,11 +1287,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1753983552, "lastModified": 1754742008,
"narHash": "sha256-xnPPjASWt4/u+GmRdrHADBKKSCtIhTFY53CSKM+Xtfk=", "narHash": "sha256-Tp0FG7VpLudVEC622d91z2hbdfPLCXxw0Nv43iNN4O0=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "91b6a111cf228fadaabba706d8f4d155efc63b3a", "rev": "67361f88fd01974ebee4cf80f0e29c87d805cc39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1425,11 +1425,11 @@
"nixpkgs": "nixpkgs_12" "nixpkgs": "nixpkgs_12"
}, },
"locked": { "locked": {
"lastModified": 1754187571, "lastModified": 1754619139,
"narHash": "sha256-1VvRI2zswUtVijM5iKJRdhtwLH8ASscZuVzhos/zMfs=", "narHash": "sha256-NHLKP08ErgbyxKSmmZUC1WxbrH54pA65yxcif8FhRxY=",
"owner": "fufexan", "owner": "fufexan",
"repo": "nix-gaming", "repo": "nix-gaming",
"rev": "40b28f289429ff02f469052224560802472955f0", "rev": "b965a1aea2e22812a012f1a0fe7308912c6fcde0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1568,11 +1568,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1754229794, "lastModified": 1754564048,
"narHash": "sha256-yOl7REX6O/1mh+tpscJPKgjK6nmXSMOB1xhmDNAMUZM=", "narHash": "sha256-dz303vGuzWjzOPOaYkS9xSW+B93PSAJxvBd6CambXVA=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "a872d985392ee5b19d8409bfcc3f106de2070070", "rev": "26ed7a0d4b8741fe1ef1ee6fa64453ca056ce113",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1588,11 +1588,11 @@
"nixpkgs": "nixpkgs_13" "nixpkgs": "nixpkgs_13"
}, },
"locked": { "locked": {
"lastModified": 1754260137, "lastModified": 1754326498,
"narHash": "sha256-IViMH6Fwj8nwO1nuYCqOTpjm9OK9rQ0w8nmoOwPlo98=", "narHash": "sha256-3ynDaygIzQYlBZFHGDeQzXmPkX2ILeZ0wWJ84FR4g7E=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "57ba096649fa4e12dc564e8e3c529255baf89b35", "rev": "ca55236cd9ef3cdea29b51a0b52a9402c60e9a27",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1727,11 +1727,11 @@
}, },
"nixpkgs-stable_2": { "nixpkgs-stable_2": {
"locked": { "locked": {
"lastModified": 1754028485, "lastModified": 1754689972,
"narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=", "narHash": "sha256-eogqv6FqZXHgqrbZzHnq43GalnRbLTkbBbFtEfm1RSc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "59e69648d345d6e8fef86158c555730fa12af9de", "rev": "fc756aa6f5d3e2e5666efcf865d190701fef150a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1759,11 +1759,11 @@
}, },
"nixpkgs_11": { "nixpkgs_11": {
"locked": { "locked": {
"lastModified": 1754095672, "lastModified": 1754498491,
"narHash": "sha256-JQAsGhHwM7K33pQV3WR1m1lk7VadHQGBmz6v3sSFSmg=", "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e07c1ba3ce542747dd0941a459b90259e228478d", "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1791,11 +1791,11 @@
}, },
"nixpkgs_13": { "nixpkgs_13": {
"locked": { "locked": {
"lastModified": 1753429684, "lastModified": 1754214453,
"narHash": "sha256-9h7+4/53cSfQ/uA3pSvCaBepmZaz/dLlLVJnbQ+SJjk=", "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "7fd36ee82c0275fb545775cc5e4d30542899511d", "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1807,11 +1807,11 @@
}, },
"nixpkgs_14": { "nixpkgs_14": {
"locked": { "locked": {
"lastModified": 1754028485, "lastModified": 1754689972,
"narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=", "narHash": "sha256-eogqv6FqZXHgqrbZzHnq43GalnRbLTkbBbFtEfm1RSc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "59e69648d345d6e8fef86158c555730fa12af9de", "rev": "fc756aa6f5d3e2e5666efcf865d190701fef150a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1871,11 +1871,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1753939845, "lastModified": 1754498491,
"narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=", "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "94def634a20494ee057c76998843c015909d6311", "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -4260,11 +4260,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754189623, "lastModified": 1754621349,
"narHash": "sha256-fstu5eb30UYwsxow0aQqkzxNxGn80UZjyehQVNVHuBk=", "narHash": "sha256-JkXUS/nBHyUqVTuL4EDCvUWauTHV78EYfk+WqiTAMQ4=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "c582ff7f0d8a7ea689ae836dfb1773f1814f472a", "rev": "c448ab42002ac39d3337da10420c414fccfb1088",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -4406,11 +4406,11 @@
"nixpkgs": "nixpkgs_15" "nixpkgs": "nixpkgs_15"
}, },
"locked": { "locked": {
"lastModified": 1752544651, "lastModified": 1754328224,
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=", "narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "2c8def626f54708a9c38a5861866660395bb3461", "rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -4438,11 +4438,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1753979771, "lastModified": 1754599117,
"narHash": "sha256-MdMdQymbivEWWkC5HqeLYtP8FYu0SqiSpiRlyw9Fm3Y=", "narHash": "sha256-AzAYdZlat002vCjCKWdFpGi2xUaiOU4DtIPnv1nomD8=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "5b81b0c4fbab3517b39d63f493760d33287150ad", "rev": "312dec38b2231b21f36903d1bdce96daa11548ff",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -4687,11 +4687,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1752338000, "lastModified": 1754533920,
"narHash": "sha256-Fxlp/yKtynug0jyuauAmvZU2SzHCfwlwWf85j+IvQ0U=", "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "ba78881a68182ce338041846164cbfed0d70935c", "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -117,8 +117,8 @@
impermanence.nixosModules.impermanence impermanence.nixosModules.impermanence
]; ];
systems.modules.home = with inputs; [ systems.hosts.kylekrein-framework12.modules = with inputs; [
inputs.impermanence.nixosModules.home-manager.impermanence nixos-hardware.nixosModules.framework-12-13th-gen-intel
]; ];
home.modules = with inputs; [ home.modules = with inputs; [

View file

@ -87,12 +87,11 @@ in
binds = with config.lib.niri.actions; let binds = with config.lib.niri.actions; let
sh = spawn "sh" "-c"; sh = spawn "sh" "-c";
emacs = action: sh "emacsclient -c --eval \"${action}\""; emacs = action: sh "emacsclient -c --eval \"${action}\"";
homedir = "/home/${username}/";
screenshot-annotate = sh ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp} -w 0)" -t ppm - | ${lib.getExe pkgs.satty} --early-exit --copy-command 'wl-copy' --filename '-' --initial-tool brush''; screenshot-annotate = sh ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp} -w 0)" -t ppm - | ${lib.getExe pkgs.satty} --early-exit --copy-command 'wl-copy' --filename '-' --initial-tool brush'';
in { in {
"Mod+E".action = sh "emacsclient -c"; "Mod+E".action = sh "emacsclient -c";
"Mod+Shift+C".action = sh "dolphin"; "Mod+Shift+C".action = sh "dolphin";
"Mod+C".action = emacs ''(dirvish \"${homedir}\")''; "Mod+C".action = emacs ''(dirvish \"${home}\")'';
"Mod+T".action = spawn "kitty"; "Mod+T".action = spawn "kitty";
"Mod+D".action = spawn "fuzzel"; "Mod+D".action = spawn "fuzzel";
"Mod+B".action = spawn "librewolf"; "Mod+B".action = spawn "librewolf";
@ -147,7 +146,7 @@ in
"Mod+Tab".action = toggle-overview; "Mod+Tab".action = toggle-overview;
}; };
input = { input = {
power-key-handling.enable = true; power-key-handling.enable = !osConfig.custom.hardware.hibernation.enable;
focus-follows-mouse = { focus-follows-mouse = {
#enable = true; #enable = true;
}; };

View file

@ -17,9 +17,15 @@ with lib.${namespace}; let
in { in {
options.${namespace}.hardware.framework12 = with types; { options.${namespace}.hardware.framework12 = with types; {
enable = mkBoolOpt false "Enable hardware support for framework 12. P.s. you still need to import inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel yourself"; enable = mkBoolOpt false "Enable hardware support for framework 12. P.s. you still need to import inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel yourself";
imports = [inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel];
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
${namespace}.hardware.battery = {
enable = true;
batteryName = "BAT1";
remainingEnergy = "charge_now";
powerUsage = "current_now";
};
services.fwupd.enable = true; #fwupdmgr update
# Ensure that the `pinctrl_tigerlake` kernel module is loaded before `soc_button_array`. # Ensure that the `pinctrl_tigerlake` kernel module is loaded before `soc_button_array`.
# This is required for correcly switching to tablet mode when the display is folded back. # This is required for correcly switching to tablet mode when the display is folded back.
boot.extraModprobeConfig = '' boot.extraModprobeConfig = ''

View file

@ -0,0 +1,42 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.hibernation;
in {
options.${namespace}.hardware.hibernation = with types; {
enable = mkBoolOpt false "Enable hibernation";
swapFileOffset = mkOpt (nullOr int) null "Offset of swapfile. Calculate offset using https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Acquire_swap_file_offset";
resumeDevice = mkOpt' path "/dev/disk/by-label/nixos";
};
config = mkIf cfg.enable {
boot = {
kernelParams = [
"resume_offset=${builtins.toString cfg.resumeDevice}"
"mem_sleep_default=deep"
];
inherit (cfg) resumeDevice;
};
services.logind = {
lidSwitch = mkDefault "suspend-then-hibernate";
powerKey = mkDefault "suspend-then-hibernate";
powerKeyLongPress = mkDefault "poweroff";
};
systemd.sleep.extraConfig = ''
HibernateDelaySec=30m
SuspendState=mem
'';
};
}

View file

@ -22,6 +22,10 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
${namespace}.impermanence = {
enable = true;
persistentStorage = "/persist";
};
disko.devices = { disko.devices = {
disk.main = { disk.main = {
inherit (cfg) device; inherit (cfg) device;

View file

@ -0,0 +1,96 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.presets.disko.impermanenceBtrfsLuks;
in {
options.${namespace}.presets.disko.impermanenceBtrfsLuks = with types; {
enable = mkBoolOpt false "Enable preset";
device = mkOpt' str "/dev/nvme0n1";
swapSize = mkOpt' int 32;
};
config = mkIf cfg.enable {
${namespace}.impermanence = {
enable = true;
persistentStorage = "/persist";
};
disko.devices = {
disk = {
main = {
type = "disk";
inherit 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 = "root_vg";
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 = "btrfs";
extraArgs = ["-L" "nixos" "-f"];
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = ["subvol=root" "compress=zstd" "noatime"];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = ["subvol=nix" "compress=zstd" "noatime"];
};
"/persist" = {
mountpoint = "/persist";
mountOptions = ["subvol=persist" "compress=zstd" "noatime"];
};
"/swap" = {
mountpoint = "/swap";
swap.swapfile.size = "${builtins.toString cfg.swapSize}G";
};
};
};
};
};
};
};
};
};
};
fileSystems."/persist".neededForBoot = true;
};
}

View file

@ -0,0 +1,3 @@
{channels, ...}: final: prev: {
inherit (channels.unstable) ollama;
}

View file

@ -0,0 +1,68 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}: let
niri-config = {
programs.niri = {
settings = {
#input.power-key-handling.enable = true;
spawn-at-startup = [
{
command = [
"${lib.getExe pkgs.brightnessctl}"
"-s 20%"
];
}
];
};
};
};
in
with lib;
with lib.custom; {
facter.reportPath = ./facter.json;
systemd.network.wait-online.enable = lib.mkForce false; #facter
custom.hardware.hibernation = {
enable = true;
swapFileOffset = 533760;
};
custom.presets.disko.impermanenceBtrfsLuks = {
enable = true;
swapSize = 64;
};
custom.hardware.framework12 = enabled;
custom.hardware.secureBoot = enabled;
custom.impermanence = enabled;
custom.presets.workstation = enabled;
custom.presets.gaming = enabled;
custom.windowManagers.niri = enabled;
custom.loginManagers.sddm = enabled;
custom.services.ai = {
enable = true;
models = ["qwq" "llama3.1" "qwen2.5-coder:7b" "gpt-oss:20b"];
};
custom.users.kylekrein = {
enable = true;
config = niri-config;
};
environment.systemPackages = with pkgs; [
blender
nix-schemas
];
#Chat host
networking.firewall.allowedTCPPorts = [80 443 22 8448 9993 8081];
# ======================== DO NOT CHANGE THIS ========================
system.stateVersion = "25.05";
# ======================== DO NOT CHANGE THIS ========================
}

File diff suppressed because it is too large Load diff