Compare commits

...

3 commits

54 changed files with 118 additions and 18372 deletions

1112
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -21,8 +21,6 @@
url = "github:nixos/nixpkgs?ref=master"; url = "github:nixos/nixpkgs?ref=master";
}; };
nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
stylix.url = "github:danth/stylix?ref=release-25.11";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
sops-nix.url = "github:Mic92/sops-nix"; sops-nix.url = "github:Mic92/sops-nix";
@ -43,18 +41,6 @@
url = "git+https://git.kylekrein.com/kylekrein/emacs-config"; url = "git+https://git.kylekrein.com/kylekrein/emacs-config";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
beeengine = {
url = "git+https://github.com/KyleKrein/BeeEngine?submodules=1"; #"git+https://git.kylekrein.com/BeeEngine/BeeEngine?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
conduwuit = {
url = "git+https://forgejo.ellis.link/continuwuation/continuwuity.git";
inputs.nixpkgs.follows = "nixpkgs";
};
niri-flake = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master"; nixos-hardware.url = "github:NixOS/nixos-hardware/master";
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
lanzaboote.url = "github:nix-community/lanzaboote"; lanzaboote.url = "github:nix-community/lanzaboote";
@ -65,10 +51,6 @@
url = "git+https://git.kylekrein.com/kylekrein/snowfall-lib"; #"git+file:///home/kylekrein/Git/snowfall-lib"; url = "git+https://git.kylekrein.com/kylekrein/snowfall-lib"; #"git+file:///home/kylekrein/Git/snowfall-lib";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
snowfall-flake = {
url = "github:snowfallorg/flake";
inputs.nixpkgs.follows = "nixpkgs";
};
deploy-rs = { deploy-rs = {
url = "github:serokell/deploy-rs"; url = "github:serokell/deploy-rs";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@ -77,23 +59,6 @@
url = "github:cachix/git-hooks.nix"; url = "github:cachix/git-hooks.nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
};
dgop = {
url = "github:AvengeMedia/dgop";
inputs.nixpkgs.follows = "nixpkgs";
};
desktopShell = {
url = "github:KyleKrein/DesktopShell";
inputs.nixpkgs.follows = "nixpkgs";
inputs.dgop.follows = "dgop";
};
rose-pine-hyprcursor = {
url = "github:ndom91/rose-pine-hyprcursor";
inputs.nixpkgs.follows = "nixpkgs";
};
declarative-jellyfin = { declarative-jellyfin = {
url = "github:Sveske-Juice/declarative-jellyfin"; url = "github:Sveske-Juice/declarative-jellyfin";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@ -130,10 +95,9 @@
}; };
# Per-channel config # Per-channel config
channels = { channels = {
nixpkgs-cuda = { nixpkgs-libre = {
config = { config = {
allowUnfree = true; allowUnfree = false;
cudaSupport = true;
}; };
input = inputs.nixpkgs; input = inputs.nixpkgs;
}; };
@ -143,14 +107,10 @@
overlays = with inputs; [ overlays = with inputs; [
emacs-kylekrein.overlays.default emacs-kylekrein.overlays.default
niri-flake.overlays.niri
snowfall-flake.overlays.default
]; ];
systems.modules.nixos = with inputs; [ systems.modules.nixos = with inputs; [
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
nix-flatpak.nixosModules.nix-flatpak
niri-flake.nixosModules.niri
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
nixos-facter-modules.nixosModules.facter nixos-facter-modules.nixosModules.facter
home-manager.nixosModules.default home-manager.nixosModules.default
@ -161,15 +121,6 @@
lanzaboote.nixosModules.lanzaboote lanzaboote.nixosModules.lanzaboote
impermanence.nixosModules.impermanence impermanence.nixosModules.impermanence
declarative-jellyfin.nixosModules.default declarative-jellyfin.nixosModules.default
desktopShell.nixosModules.greeter
];
systems.hosts.kylekrein-framework12.modules = with inputs; [
nixos-hardware.nixosModules.framework-12-13th-gen-intel
];
homes.modules = with inputs; [
nix-flatpak.homeManagerModules.nix-flatpak
]; ];
templates = import ./templates {}; templates = import ./templates {};
@ -183,7 +134,7 @@
}; };
kylekrein-homepc.remoteBuild = true; kylekrein-homepc.remoteBuild = true;
}; };
exclude = ["kylekrein-wsl-wm" "kylekrein-server"]; exclude = ["kylekrein-wsl-wm" ];
}; };
outputs-builder = channels: { outputs-builder = channels: {

View file

@ -1,29 +0,0 @@
{
lib,
pkgs,
config,
...
}:
# User information gathered by Snowfall Lib is available.
let
name = config.snowfallorg.user.name;
home = config.snowfallorg.user.home.directory;
in {
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
custom = {
programs.librewolf.enable = true;
};
services.flatpak.packages = [
"org.vinegarhq.Sober"
];
home = {
packages = with pkgs; [
zapzap
];
sessionVariables = {
};
stateVersion = "24.11";
};
}

View file

@ -1,36 +0,0 @@
{
pkgs,
lib,
inputs,
...
}: {
home.packages = with pkgs; [
inputs.quickshell.packages.${pkgs.system}.quickshell
material-symbols
inter
fira-code
cava
wl-clipboard
cliphist
ddcutil
matugen
dgop
glib
khal # calendar
gammastep # night mode
colloid-gtk-theme
kitty
playerctl
brightnessctl
libnotify
emacs-pgtk
hyprshot
jq
kdePackages.gwenview
kdePackages.ark
inputs.rose-pine-hyprcursor.packages.${pkgs.system}.default
];
xdg.configFile."quickshell".source = "${
inputs.desktopShell.packages.${pkgs.system}.dankMaterialShell
}/etc/xdg/quickshell";
}

View file

@ -17,35 +17,16 @@ in
enable = true; enable = true;
firstNixOSInstall = 1729112485; firstNixOSInstall = 1729112485;
}; };
#nheko.enable = osConfig.custom.presets.wayland.enable;
#xournalpp.enable = osConfig.custom.presets.wayland.enable;
librewolf.enable = osConfig.custom.presets.wayland.enable;
prismlauncher.enable = osConfig.custom.presets.gaming.enable;
minecraft-bedrock.enable = osConfig.custom.presets.gaming.enable;
bottles.enable = osConfig.custom.presets.wayland.enable;
nextcloud-client.enable = osConfig.custom.presets.wayland.enable;
thunderbird.enable = osConfig.custom.presets.wayland.enable;
}; };
}; };
home = { home = {
packages = with pkgs; packages = with pkgs;
[ [
neovim neovim
]
++ lib.optionals osConfig.custom.presets.wayland.enable [
gdb
element-desktop
vesktop
obs-studio
localsend
kdePackages.kdenlive
]; ];
sessionVariables = { sessionVariables = {
EDITOR = EDITOR ="nvim";
if osConfig.custom.presets.wayland.enable
then "emacsclient -c"
else "nvim";
NH_OS_FLAKE = "${home}/nixos-config"; NH_OS_FLAKE = "${home}/nixos-config";
NH_HOME_FLAKE = "${home}/nixos-config"; NH_HOME_FLAKE = "${home}/nixos-config";
NH_DARWIN_FLAKE = "${home}/nixos-config"; NH_DARWIN_FLAKE = "${home}/nixos-config";

View file

@ -1,31 +0,0 @@
{
pkgs,
system,
inputs,
osConfig,
lib,
config,
...
}: let
emacs = pkgs.kylekrein.nixmacs.override {withLsps = true;};
in {
programs.emacs = {
enable = osConfig.custom.presets.wayland.enable;
package = emacs;
};
systemd.user.services.emacs = lib.mkIf config.programs.emacs.enable {
Unit = {
Description = "Launches (and relaunches) emacs";
};
Install = {
WantedBy = ["graphical-session.target"];
};
Service = {
ExecStart = "${pkgs.writeShellScript "run-emacs" ''
${emacs}/bin/emacs --fg-daemon
''}";
Restart = "always";
RestartSec = 5;
};
};
}

View file

@ -1,31 +0,0 @@
{
osConfig,
config,
pkgs,
...
}: {
home.packages = with pkgs; lib.optionals (config.programs.kitty.enable) [kitty-themes];
programs.fzf = {
enable = true;
enableBashIntegration = true;
};
programs.eza = {
enable = true;
icons = "always";
};
programs.kitty = {
enable = osConfig.custom.presets.workstation.enable;
font = {
name = "JetBrainsMono Nerd Font";
size = 20;
};
settings = {
confirm_os_window_close = 0;
};
#shellIntegration.enableFishIntegration = true;
themeFile = "Catppuccin-Macchiato";
#Also available: Catppuccin-Frappe Catppuccin-Latte Catppuccin-Macchiato Catppuccin-Mocha
# See all available kitty themes at: https://github.com/kovidgoyal/kitty-themes/blob/46d9dfe230f315a6a0c62f4687f6b3da20fd05e4/themes.json
};
}

View file

@ -1,23 +0,0 @@
{
pkgs,
lib,
osConfig,
config,
...
}: let
impermanence = config.custom.impermanence;
in {
config = lib.mkIf osConfig.custom.presets.wayland.enable {
home.packages = with pkgs; [
lrcget
picard
beets
];
home.persistence = lib.mkIf impermanence.enable {
"${impermanence.persistentStorage}".directories = [
".config/MusicBrainz"
".config/beets"
];
};
};
}

View file

@ -1,81 +0,0 @@
{
osConfig,
config,
pkgs,
lib,
inputs,
namespace,
...
}:
with lib.custom; let
username = config.snowfallorg.user.name;
home = config.snowfallorg.user.home.directory;
impermanence = config.${namespace}.impermanence;
in
lib.mkIf osConfig.custom.windowManagers.niri.enable {
home.packages = with pkgs; [
inputs.quickshell.packages.${pkgs.system}.quickshell
material-symbols
inter
fira-code
cava
wl-clipboard
cliphist
ddcutil
matugen
dgop
glib
khal # calendar
gammastep # night mode
grim
slurp
satty
];
programs.kitty = {
themeFile = lib.mkForce null;
extraConfig = ''
include ${home}/.config/kitty/dank-theme.conf
'';
};
xdg.configFile."quickshell".source = "${
inputs.desktopShell.packages.${pkgs.system}.dankMaterialShell
}/etc/xdg/quickshell";
home.file.".config/DankMaterialShell/settings.json".source = ./settings.json;
home.persistence = lib.mkIf impermanence.enable {
"${impermanence.persistentStorage}" = {
files = [
".local/state/DankMaterialShell/session.json"
".local/share/color-schemes/DankMatugen.colors"
];
directories = [
".cache/quickshell/dankshell"
#".config/qt5ct"
#".config/qt6ct"
#".config/gtk-3.0"
#".config/gtk-4.0"
];
};
};
systemd.user.services.desktop-shell = {
Unit = {
Description = "Launches (and relaunches) Desktop Shell";
};
Install = {
WantedBy = ["graphical-session.target"];
};
Service = {
ExecStart = ''${lib.getExe pkgs.bash} -c "qs -c dms"'';
Restart = "always";
RestartSec = 5;
};
};
programs.niri = {
settings = {
spawn-at-startup = [
{command = ["wl-paste" "--watch" "cliphist" "store"];}
];
};
};
}

View file

@ -1,47 +0,0 @@
* {
border: none;
font-family: Font Awesome, Roboto, Arial, sans-serif;
font-size: 16px;
color: #eeeeee;
border-radius: 10px;
}
window {
background-color: rgba(50, 63, 99, 0.718);
color: #eeeeee;
}
/* search entry */
entry {
background-color: rgba(0, 0, 0, 0.2)
}
button, image {
background: none;
border: none
}
button:hover {
background-color: rgba(255, 255, 255, 0.1)
}
/* in case you wanted to give category buttons a different look */
#category-button {
margin: 0 10px 0 10px
}
#pinned-box {
padding-bottom: 5px;
border-bottom: 1px dotted gray
}
#files-box {
padding: 5px;
border: 1px dotted gray;
border-radius: 15px
}
/* math operation result label */
#math-label {
font-weight: bold;
font-size: 16px
}

View file

@ -1,529 +0,0 @@
#https://github.com/sodiboo/niri-flake/blob/main/default-config.kdl.nix
#https://github.com/sodiboo/niri-flake/blob/main/docs.md
#https://github.com/sodiboo/system/blob/main/niri.mod.nix
{
osConfig,
config,
pkgs,
lib,
inputs,
...
}:
with lib.custom; let
username = config.snowfallorg.user.name;
home = config.snowfallorg.user.home.directory;
in
lib.mkIf osConfig.custom.windowManagers.niri.enable {
custom = {
programs.nautilus = enabled;
};
home.packages = with pkgs; [
playerctl
papers
brightnessctl
libnotify
custom.wvkbd-kylekrein
custom.lisgd-kylekrein
];
programs.niri = {
settings = {
spawn-at-startup = [
{
command = [
"${lib.getExe pkgs.custom.wvkbd-kylekrein}"
"--hidden"
];
}
{
command = [
"dbus-update-activation-environment"
"--systemd"
"--all"
];
}
{
command = [
"${pkgs.solaar}/bin/solaar"
"-w"
"hide"
];
}
];
layout = {
preset-column-widths = [
{proportion = 1.0 / 2.0;}
{proportion = 1.0;}
{proportion = 2.0 / 3.0;}
{proportion = 1.0 / 3.0;}
];
default-column-width = {proportion = 1.0;};
};
binds = with config.lib.niri.actions; let
sh = spawn "sh" "-c";
emacs = action: sh "emacsclient -c --eval \"${action}\"";
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='-' -o '~/Pictures/Screenshots/Screenshot-%Y-%m-%d_%H:%M:%S.png' --initial-tool brush'';
in {
"Mod+E".action = sh "emacsclient -c";
"Mod+Shift+C".action = sh "nautilus";
"Mod+C".action = emacs ''(dirvish \"${home}\")'';
"Mod+T".action = spawn "kitty";
"Mod+B".action = spawn "librewolf";
"Mod+H".action = show-hotkey-overlay;
"Mod+F".action = fullscreen-window;
"Mod+R".action = switch-preset-column-width;
"Mod+Q".action = close-window;
"Mod+P".action = sh ''emacsclient -cF "((visibility . nil))" -e "(emacs-run-password-copy-field)"'';
"Mod+Shift+S".action = screenshot-annotate;
"Mod+1".action = focus-workspace 1;
"Mod+2".action = focus-workspace 2;
"Mod+3".action = focus-workspace 3;
"Mod+4".action = focus-workspace 4;
"Mod+5".action = focus-workspace 5;
"Mod+6".action = focus-workspace 6;
"Mod+7".action = focus-workspace 7;
"Mod+8".action = focus-workspace 8;
"Mod+9".action = focus-workspace 9;
"Mod+0".action = focus-workspace 10;
"Mod+Shift+1".action.move-column-to-workspace = 1;
"Mod+Shift+2".action.move-column-to-workspace = 2;
"Mod+Shift+3".action.move-column-to-workspace = 3;
"Mod+Shift+4".action.move-column-to-workspace = 4;
"Mod+Shift+5".action.move-column-to-workspace = 5;
"Mod+Shift+6".action.move-column-to-workspace = 6;
"Mod+Shift+7".action.move-column-to-workspace = 7;
"Mod+Shift+8".action.move-column-to-workspace = 8;
"Mod+Shift+9".action.move-column-to-workspace = 9;
"Mod+Shift+0".action.move-column-to-workspace = 10;
"Mod+Left".action = focus-column-left;
"Mod+Right".action = focus-column-right;
"Mod+Up".action = focus-workspace-up;
"Mod+Down".action = focus-workspace-down;
"Mod+Shift+Left".action = move-column-left;
"Mod+Shift+Right".action = move-column-right;
"Mod+Shift+Up".action = move-column-to-workspace-up;
"Mod+Shift+Down".action = move-column-to-workspace-down;
"Mod+Ctrl+Left".action = focus-monitor-left;
"Mod+Ctrl+Right".action = focus-monitor-right;
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
"Ctrl+Alt+Delete" = {
hotkey-overlay.title = "Restart Desktop Shell";
action.spawn = [
"systemctl"
"--user"
"restart"
"desktop-shell.service"
];
};
"Mod+Space" = {
hotkey-overlay.title = "App Launcher";
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"spotlight"
"toggle"
];
};
"Mod+V" = {
hotkey-overlay.title = "Clipboard Manager";
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"clipboard"
"toggle"
];
};
"Mod+M" = {
hotkey-overlay.title = "System Monitor";
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"processlist"
"toggle"
];
};
"Mod+Comma" = {
hotkey-overlay.title = "Open Settings";
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"settings"
"toggle"
];
};
"Super+L" = {
hotkey-overlay.title = "Lock";
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"lock"
"lock"
];
};
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"audio"
"increment"
"3"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"audio"
"decrement"
"3"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"audio"
"mute"
];
};
"XF86AudioMicMute" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"audio"
"micmute"
];
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"brightness"
"increment"
"5"
""
];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action.spawn = [
"qs"
"-c"
"dms"
"ipc"
"call"
"brightness"
"decrement"
"5"
""
];
};
"XF86AudioNext" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action = sh "playerctl next";
};
"XF86AudioPause" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action = sh "playerctl play-pause";
};
"XF86AudioPlay" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action = sh "playerctl play-pause";
};
"XF86AudioPrev" = {
allow-when-locked = true;
hotkey-overlay.hidden = true;
action = sh "playerctl previous";
};
#"Mod+Tab".action = focus-window-down-or-column-right;
#"Mod+Shift+Tab".action = focus-window-up-or-column-left;
"Mod+Tab".action = toggle-overview;
};
input = {
power-key-handling.enable = false;
focus-follows-mouse = {
#enable = true;
};
warp-mouse-to-focus.enable = false;
keyboard = {
xkb.layout = "eu, ru";
xkb.options = "grp:lctrl_toggle, ctrl:nocaps";
track-layout = "window";
numlock = true;
};
touchpad = {
tap = true;
#accel-profile = "adaptive";
click-method = "clickfinger";
};
};
cursor = {
hide-after-inactive-ms = 10000;
};
gestures.hot-corners.enable = true;
prefer-no-csd = true;
environment = {
XDG_SESSION_TYPE = "wayland";
__GL_GSYNC_ALLOWED = "1";
QT_QPA_PLATFORM = "wayland";
DISPLAY = ":0";
};
layer-rules = [
{
#this is for later to place keyboard on top of hyprlock
matches = [{namespace = "wvkbd";}];
}
];
window-rules = [
{
#active
matches = [
{
is-active = true;
}
];
opacity = 1.0;
}
{
#inactive
matches = [
{
is-active = false;
}
];
opacity = 1.0;
}
{
#opaque
matches = [
{
app-id = "emacs";
}
{
app-id = "blender";
}
];
opacity = 1.0;
}
{
#Popups
matches = [
{
title = "emacs-run-launcher";
}
{
title = "Paradox Crash Reporter";
}
];
open-floating = true;
open-focused = true;
}
{
#Screenshots
matches = [
{
title = "satty";
}
{
app-id = "com.gabm.satty";
}
];
open-floating = true;
open-focused = true;
min-width = 700;
min-height = 350;
}
{
#PiP
matches = [
{
title = "Picture-in-Picture";
}
];
open-floating = true;
open-focused = false;
opacity = 1.0;
default-floating-position = {
x = 0;
y = 0;
relative-to = "top-right";
};
}
];
xwayland-satellite = {
enable = true;
path = "${lib.getExe pkgs.xwayland-satellite-unstable}";
};
};
};
xdg.portal.extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
services.hypridle = let
niri = lib.getExe config.programs.niri.package;
loginctl = "${pkgs.systemd}/bin/loginctl";
qs = "${inputs.quickshell.packages.${pkgs.system}.quickshell}/bin/qs";
locking-script = "${qs} -c dms ipc call lock lock";
systemctl = "${pkgs.systemd}/bin/systemctl";
suspendScript = cmd:
pkgs.writeShellScript "suspend-script" ''
# check if any player has status "Playing"
${lib.getExe pkgs.playerctl} -a status | ${lib.getExe pkgs.ripgrep} Playing -q
# only suspend if nothing is playing
if [ $? == 1 ]; then
${cmd}
fi
'';
in {
enable = true;
settings.general = {
before_sleep_cmd = "${loginctl} lock-session";
#after_sleep_cmd = "#${niri} msg action power-on-monitors";
lock_cmd = "${locking-script}";
ignore_dbus_inhibit = false; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
ignore_systemd_inhibit = false; # whether to ignore systemd-inhibit --what=idle inhibitors
};
settings.listener = let
secondary = "${systemctl} suspend";
in [
#{
# timeout = 30;
# command = "pidof hyprlock && ${secondary}";
#}
{
timeout = 870;
on-timeout = "${suspendScript ''${pkgs.libnotify}/bin/notify-send "You are idle. Going to sleep in 30 seconds"''}";
}
{
timeout = 900;
on-timeout = "${suspendScript "${systemctl} suspend"}";
}
];
};
systemd.user.services.lisgd-niri = lib.mkIf (config.custom.hardware.tablet.enable) {
Unit = {
Description = "Makes sure that you have touchscreen gestures.";
};
Install = {
WantedBy = ["graphical-session.target"];
};
Service = {
ExecStart = "${pkgs.writeShellScript "run-lisgd" ''
${pkgs.custom.lisgd-kylekrein}/bin/lisgd
''}";
Restart = "always";
RestartSec = 5;
};
};
systemd.user.services.autorotate-niri = lib.mkIf (config.custom.hardware.tablet.enable) {
Unit = {
Description = "Adds auto rotation to Niri.";
};
Install = {
WantedBy = ["graphical-session.target"];
};
Service = {
ExecStart = "${pkgs.writeShellScript "autorotate" ''
transform="normal"
monitor-sensor | while read -r line; do
case "$line" in
*normal*)
new_transform="normal"
;;
*right-up*)
new_transform="270"
;;
*bottom-up*)
new_transform="180"
;;
*left-up*)
new_transform="90"
;;
*)
continue
;;
esac
if [[ "$new_transform" != "$transform" ]]; then
transform="$new_transform"
echo "Transform: $transform"
niri msg output eDP-1 transform "$transform"
systemctl --user restart lisgd-niri.service
fi
done
''}";
Restart = "always";
RestartSec = 5;
};
};
custom.hardware.tablet = {
onTabletModeEnable = [
{
name = "autorotate";
command = "systemctl --user start autorotate-niri.service";
}
];
onTabletModeDisable = [
{
name = "autorotate";
command = ''
systemctl --user stop autorotate-niri.service
niri msg output eDP-1 transform normal
'';
}
];
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

View file

@ -1,223 +0,0 @@
{
"currentThemeName": "dynamic",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"dankBarTransparency": 0.75,
"dankBarWidgetTransparency": 0.85,
"popupTransparency": 0.92,
"dockTransparency": 1,
"use24HourClock": true,
"useFahrenheit": false,
"nightModeEnabled": false,
"weatherLocation": "51.7177044, 8.7526530",
"weatherCoordinates": "51.7177044,8.7526530",
"useAutoLocation": false,
"weatherEnabled": true,
"showLauncherButton": true,
"showWorkspaceSwitcher": true,
"showFocusedWindow": true,
"showWeather": true,
"showMusic": true,
"showClipboard": true,
"showCpuUsage": true,
"showMemUsage": true,
"showCpuTemp": true,
"showGpuTemp": true,
"selectedGpuIndex": 0,
"enabledGpuPciIds": [],
"showSystemTray": true,
"showClock": true,
"showNotificationButton": true,
"showBattery": true,
"showControlCenterButton": true,
"controlCenterShowNetworkIcon": true,
"controlCenterShowBluetoothIcon": true,
"controlCenterShowAudioIcon": true,
"controlCenterWidgets": [
{
"id": "volumeSlider",
"enabled": true,
"width": 50
},
{
"id": "brightnessSlider",
"enabled": true,
"width": 50
},
{
"id": "wifi",
"enabled": true,
"width": 50
},
{
"id": "bluetooth",
"enabled": true,
"width": 50
},
{
"id": "audioOutput",
"enabled": true,
"width": 50
},
{
"id": "audioInput",
"enabled": true,
"width": 50
},
{
"id": "nightMode",
"enabled": true,
"width": 25
},
{
"id": "idleInhibitor",
"enabled": true,
"width": 25
},
{
"id": "doNotDisturb",
"enabled": true,
"width": 25
},
{
"id": "battery",
"enabled": true,
"width": 25
},
{
"id": "diskUsage",
"enabled": true,
"width": 100,
"instanceId": "mfz4b7s6aer4zpglo9g",
"mountPath": "/"
}
],
"showWorkspaceIndex": false,
"showWorkspacePadding": false,
"showWorkspaceApps": true,
"maxWorkspaceIcons": 30,
"workspacesPerMonitor": true,
"workspaceNameIcons": {},
"waveProgressEnabled": true,
"clockCompactMode": false,
"focusedWindowCompactMode": false,
"runningAppsCompactMode": true,
"runningAppsCurrentWorkspace": false,
"clockDateFormat": "ddd d",
"lockDateFormat": "dddd, MMMM d",
"mediaSize": 0,
"dankBarLeftWidgets": [
"launcherButton",
"advancedWorkspaceSwitcher",
{
"id": "workspaceSwitcher",
"enabled": true
}
],
"dankBarCenterWidgets": [
{
"id": "music",
"enabled": true
},
{
"id": "clock",
"enabled": true
},
{
"id": "weather",
"enabled": true
}
],
"dankBarRightWidgets": [
{
"id": "systemTray",
"enabled": true
},
{
"id": "clipboard",
"enabled": true
},
{
"id": "notificationButton",
"enabled": true
},
{
"id": "privacyIndicator",
"enabled": true
},
{
"id": "keyboard_layout_name",
"enabled": true
},
{
"id": "battery",
"enabled": true
},
{
"id": "controlCenterButton",
"enabled": true
}
],
"appLauncherViewMode": "grid",
"spotlightModalViewMode": "list",
"networkPreference": "auto",
"iconTheme": "System Default",
"launcherLogoMode": "os",
"launcherLogoCustomPath": "",
"launcherLogoColorOverride": "primary",
"launcherLogoColorInvertOnMode": false,
"launcherLogoBrightness": 0.5,
"launcherLogoContrast": 1,
"launcherLogoSizeOffset": 0,
"fontFamily": "Inter Variable",
"monoFontFamily": "Fira Code",
"fontWeight": 400,
"fontScale": 1,
"dankBarFontScale": 1,
"notepadUseMonospace": true,
"notepadFontFamily": "",
"notepadFontSize": 14,
"notepadShowLineNumbers": false,
"notepadTransparencyOverride": -1,
"notepadLastCustomTransparency": 0.95,
"gtkThemingEnabled": true,
"qtThemingEnabled": true,
"showDock": false,
"dockAutoHide": false,
"dockGroupByApp": false,
"dockOpenOnOverview": false,
"dockPosition": 1,
"dockSpacing": 4,
"dockBottomGap": 0,
"cornerRadius": 12,
"notificationOverlayEnabled": false,
"dankBarAutoHide": false,
"dankBarOpenOnOverview": true,
"dankBarVisible": true,
"dankBarSpacing": 4,
"dankBarBottomGap": 0,
"dankBarInnerPadding": 8,
"dankBarSquareCorners": false,
"dankBarNoBackground": false,
"dankBarGothCornersEnabled": false,
"dankBarBorderEnabled": false,
"dankBarPosition": 0,
"lockScreenShowPowerActions": true,
"hideBrightnessSlider": false,
"widgetBackgroundColor": "sth",
"surfaceBase": "s",
"notificationTimeoutLow": 5000,
"notificationTimeoutNormal": 5000,
"notificationTimeoutCritical": 0,
"notificationPopupPosition": 0,
"osdAlwaysShowValue": false,
"screenPreferences": {
"notifications": [
"all"
],
"toast": [
"all"
]
},
"animationSpeed": 2
}

View file

@ -1,25 +0,0 @@
{
osConfig,
config,
pkgs,
lib,
inputs,
namespace,
...
}:
with lib.custom; let
username = config.snowfallorg.user.name;
home = config.snowfallorg.user.home.directory;
impermanence = config.${namespace}.impermanence;
in
lib.mkIf osConfig.custom.windowManagers.niri.enable {
home.packages = with pkgs; [
nordic
];
programs.niri = {
settings = {
cursor.theme = "Nordic-cursors";
};
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 MiB

View file

@ -1,22 +0,0 @@
{
lib,
pkgs,
config,
...
}:
# User information gathered by Snowfall Lib is available.
let
name = config.snowfallorg.user.name;
home = config.snowfallorg.user.home.directory;
in {
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
home = {
packages = with pkgs; [
];
sessionVariables = {
};
stateVersion = "25.05";
};
}

View file

@ -1,57 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
osConfig,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.tablet;
osCfg = osConfig.${namespace}.hardware.tablet;
in {
options.${namespace}.hardware.tablet = with types; {
enable = mkBoolOpt osCfg.enable "Enable tablet module for hardware that supports it";
path = mkOpt path osCfg.path "Path with a file, where it's stated, whether tablet mode 'on' or 'off'";
onTabletModeEnable = mkOpt (listOf (attrsOf str)) [] "Actions to do when entering tablet mode. Should have name and command string attributes.";
onTabletModeDisable = mkOpt (listOf (attrsOf str)) [] "Actions to do when exiting tablet mode. Should have name and command string attributes.";
};
config = mkIf cfg.enable {
systemd.user.services.tablet-mode-watcher = {
Service = {
Type = "oneshot";
ExecStart = pkgs.writeShellScript "tablet-mode-watcher" ''
state=$(${pkgs.coreutils}/bin/cat "${cfg.path}" 2>/dev/null || echo 0)
if [ "$state" -eq 1 ]; then
echo "Tablet mode ON"
${concatStringsSep "\n" (map (cmd: ''
systemd-run --user --unit=tablet-on-${cmd.name} --collect sh -c '${cmd.command}'
'')
cfg.onTabletModeEnable)}
else
echo "Tablet mode OFF"
${concatStringsSep "\n" (map (cmd: ''
systemd-run --user --unit=tablet-off-${cmd.name} --collect sh -c '${cmd.command}'
'')
cfg.onTabletModeDisable)}
fi
'';
};
};
systemd.user.paths.tablet-mode-watcher = {
Unit.Description = "Watch for tablet mode changes";
Path.PathChanged = cfg.path;
Install.WantedBy = ["default.target"];
};
};
}

View file

@ -1,35 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.asahi;
in {
options.${namespace}.hardware.asahi = with types; {
enable = mkBoolOpt false "Enable hardware support for Apple Silicon (M Chips)";
imports = [
inputs.apple-silicon-support.nixosModules.default
({pkgs, ...}: {
hardware.asahi = {
peripheralFirmwareDirectory = ./firmware;
useExperimentalGPUDriver = true; #deprecated
#experimentalGPUInstallMode = "overlay";
setupAsahiSound = true;
};
environment.systemPackages = with pkgs; [
mesa-asahi-edge
];
})
];
};
}

View file

@ -1,88 +0,0 @@
{
config,
namespace,
pkgs,
...
}: let
cfg = config.${namespace}.hardware.battery;
battery-path = "/sys/class/power_supply/${cfg.batteryName}";
get-battery-level = "${pkgs.writeShellScriptBin "get-battery-level" ''
cat ${battery-path}/capacity 2>/dev/null || echo "N/A"
''}/bin/get-battery-level";
get-status = "${pkgs.writeShellScriptBin "get-status" ''
cat ${battery-path}/status 2>/dev/null || echo "Unknown"
''}/bin/get-status";
get-icon = "${pkgs.writeShellScriptBin "get-icon" ''
BATTERY_LEVEL=$(${get-battery-level})
STATUS=$(${get-status})
if [[ "$BATTERY_LEVEL" == "N/A" ]]; then
ICON="󰂑 "
elif [[ "$STATUS" == "Charging" ]]; then
if [[ $BATTERY_LEVEL -ge 90 ]]; then
ICON="󰂋 "
elif [[ $BATTERY_LEVEL -ge 80 ]]; then
ICON="󰂊 "
elif [[ $BATTERY_LEVEL -ge 70 ]]; then
ICON="󰢞 "
elif [[ $BATTERY_LEVEL -ge 60 ]]; then
ICON="󰂉 "
elif [[ $BATTERY_LEVEL -ge 50 ]]; then
ICON="󰢝 "
elif [[ $BATTERY_LEVEL -ge 40 ]]; then
ICON="󰂈 "
elif [[ $BATTERY_LEVEL -ge 30 ]]; then
ICON="󰂇 "
elif [[ $BATTERY_LEVEL -ge 20 ]]; then
ICON="󰂆 "
elif [[ $BATTERY_LEVEL -ge 10 ]]; then
ICON="󰢜 "
else
ICON="󰢜 "
fi
else
if [[ $BATTERY_LEVEL -ge 90 ]]; then
ICON="󰂂 "
elif [[ $BATTERY_LEVEL -ge 70 ]]; then
ICON="󰂀 "
elif [[ $BATTERY_LEVEL -ge 50 ]]; then
ICON="󰁾 "
elif [[ $BATTERY_LEVEL -ge 30 ]]; then
ICON="󰁼 "
elif [[ $BATTERY_LEVEL -ge 10 ]]; then
ICON="󰁺 "
else
ICON="󰁺 "
fi
fi
echo "$ICON"
''}/bin/get-icon";
get-remaining-time = "${pkgs.writeShellScriptBin "get-remaining-time" ''
REMAINING_ENERGY=$(cat ${battery-path}/${cfg.remainingEnergy})
POWER_USAGE=$(cat ${battery-path}/${cfg.powerUsage})
if [[ -n "$REMAINING_ENERGY" && -n "$POWER_USAGE" && "$POWER_USAGE" -ne 0 ]]; then
TIME_LEFT=$(((REMAINING_ENERGY / POWER_USAGE)))
MINUTES_LEFT=$(((( (REMAINING_ENERGY * 60) / POWER_USAGE )) - (TIME_LEFT * 60)))
echo "$TIME_LEFT h $MINUTES_LEFT min"
else
echo ""
fi
''}/bin/get-remaining-time";
in {
${namespace}.hardware.battery.scripts = {
icon = get-icon;
status = get-status;
time = get-remaining-time;
level = get-battery-level;
labelAdaptive = "${pkgs.writeShellScriptBin "labelAdaptive" ''
if [[ "$(${get-status})" == "Charging" ]]; then
echo "$(${get-battery-level})% $(${get-icon})"
else
echo "$(${get-remaining-time}) $(${get-icon})"
fi
''}/bin/labelAdaptive";
labelPercent = "${pkgs.writeShellScriptBin "labelPercent" ''
echo "$(${get-battery-level})% $(${get-icon})"
''}/bin/labelPercent";
};
}

View file

@ -1,43 +0,0 @@
{
lib,
pkgs,
namespace,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.battery;
in {
options.${namespace}.hardware.battery = with types; {
enable = mkBoolOpt false "If you have a battery in your hardware, enable this";
batteryName = mkOpt str "BAT1" ''
Put your battery name here. You can find it at "/sys/class/power_supply/"
'';
remainingEnergy = mkOpt str "charge_now" ''
File in your battery, that tells the current amount of energy
'';
powerUsage = mkOpt str "current_now" ''
File in your battery, that tells, how much energy your hardware is using
'';
scripts = {
icon = mkOpt' str "";
status = mkOpt' str "";
time = mkOpt' str "";
level = mkOpt' str "";
labelAdaptive = mkOpt' str "";
labelPercent = mkOpt' str "";
};
};
config = mkIf cfg.enable (mkMerge [
(import ./batteryStatus.nix {
inherit config;
inherit namespace;
inherit pkgs;
})
{
services.upower.enable = true;
}
]);
}

View file

@ -1,88 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.framework12;
in {
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";
};
config = mkIf cfg.enable {
${namespace}.hardware = {
tablet.enable = true;
battery = {
enable = true;
batteryName = "BAT1";
remainingEnergy = "charge_now";
powerUsage = "current_now";
};
};
# 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.
boot.extraModprobeConfig = ''
softdep soc_button_array pre: pinctrl_tigerlake
'';
boot.initrd.kernelModules = ["pinctrl_tigerlake"];
# Patch the `udev` rules shipping with `iio-sensor-proxy` according to:
# https://github.com/FrameworkComputer/linux-docs/blob/main/framework12/Ubuntu-25-04-accel-ubuntu25.04.md
nixpkgs.overlays = [
(final: prev: {
iio-sensor-proxy = prev.iio-sensor-proxy.overrideAttrs (old: {
postInstall = ''
${old.postInstall or ""}
sed -i 's/.*iio-buffer-accel/#&/' $out/lib/udev/rules.d/80-iio-sensor-proxy.rules
'';
});
})
];
hardware.intel-gpu-tools.enable = true;
services.thermald.enable = true;
hardware.enableRedistributableFirmware = true;
environment.systemPackages = [
pkgs.framework-tool
(pkgs.writeShellScriptBin "reset-tablet" ''
sudo ${pkgs.framework-tool}/bin/framework_tool --tablet-mode tablet
sudo ${pkgs.framework-tool}/bin/framework_tool --tablet-mode auto
'')
];
security.sudo.extraRules = [
{
users = ["ALL"];
commands = [
{
command = "${pkgs.framework-tool}/bin/framework_tool";
options = ["NOPASSWD"];
}
];
}
];
services.xserver.videoDrivers = ["modesetting"];
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
# For modern Intel CPU's
intel-media-driver # Enable Hardware Acceleration
vpl-gpu-rt # Enable QSV
];
};
environment.sessionVariables = {LIBVA_DRIVER_NAME = "iHD";};
users.groups.touchscreen = {};
services.udev.extraRules = ''
KERNEL=="event*", ATTRS{name}=="ILIT2901:00 222A:5539", SYMLINK+="touchscreen", MODE="0660", GROUP="touchscreen"
'';
};
}

View file

@ -1,44 +0,0 @@
{
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 =
[
"mem_sleep_default=deep"
]
#https://github.com/nix-community/disko/issues/651#issuecomment-2383741717
++ optional (cfg.swapFileOffset != null) "resume_offset=${builtins.toString cfg.swapFileOffset}";
resumeDevice = mkDefault cfg.resumeDevice;
};
services.logind.settings.Login = {
HandleLidSwitch = mkDefault "suspend-then-hibernate";
HandlePowerKey = mkDefault "suspend-then-hibernate";
HandlePowerKeyLongPress = mkDefault "poweroff";
};
systemd.sleep.extraConfig = ''
HibernateDelaySec=30m
SuspendState=mem
'';
};
}

View file

@ -1,70 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.hardware.tablet;
in {
options.${namespace}.hardware.tablet = with types; {
enable = mkBoolOpt false "Enable tablet module for hardware that supports it";
path = mkOpt path "/run/tablet-mode-state" "Path with a file, where it's stated, whether tablet mode 'on' or 'off'";
inputDevice = mkOpt' str "/dev/input/event4";
onTabletModeEnable = mkOpt (listOf (attrsOf str)) [] "Actions to do when entering tablet mode";
onTabletModeDisable = mkOpt (listOf (attrsOf str)) [] "Actions to do when exiting tablet mode";
};
config = mkIf cfg.enable {
# 1. System service for watching
systemd.services = {
tablet-mode-watcher = {
description = "Watch for tablet mode changes";
serviceConfig = {
ExecStart = "${pkgs.writeShellScript "tablet-mode-eventd" ''
if [ -f "${cfg.path}" ]; then
in_tablet_mode=$(${pkgs.coreutils}/bin/cat "${cfg.path}")
else
echo 0 > "${cfg.path}"
in_tablet_mode=0
fi
stdbuf -oL -eL ${lib.getExe pkgs.libinput} debug-events --device "${cfg.inputDevice}" | while read -r line; do
if [[ "$line" =~ switch\ tablet-mode\ state\ ([01]) ]]; then
d="''${BASH_REMATCH[1]}"
if [ "$d" -ne "$in_tablet_mode" ]; then
in_tablet_mode=$d
if [ "$d" -eq 1 ]; then
${concatStringsSep "\n" (map (cmd: ''
systemd-run --unit=tablet-on-${cmd.name} --collect sh -c '${cmd.command}'
'')
cfg.onTabletModeEnable)}
echo "Tablet mode ON"
echo 1 > "${cfg.path}"
else
${concatStringsSep "\n" (map (cmd: ''
systemd-run --unit=tablet-off-${cmd.name} --collect sh -c '${cmd.command}'
'')
cfg.onTabletModeDisable)}
echo "Tablet mode OFF"
echo 0 > "${cfg.path}"
fi
fi
fi
done
''}";
Restart = "always";
};
wantedBy = ["graphical.target"];
};
};
};
}

View file

@ -1,46 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.loginManagers.sddm;
in {
options.${namespace}.loginManagers.sddm = with types; {
enable = mkBoolOpt false "Enable sddm as login manager";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
(catppuccin-sddm.override {
flavor = "mocha";
# font = "";
fontSize = "16";
#background;
loginBackground = false;
})
wvkbd
];
services.xserver.enable = true;
services.displayManager.sddm = {
enable = true;
theme = "catppuccin-mocha";
package = mkDefault pkgs.kdePackages.sddm;
wayland.enable = mkDefault config.${namespace}.presets.wayland.enable;
settings = {
General = {
InputMethod = "wvkbd-mobintl"; # Enables optional virtual keyboard at login (SDDM). Useful for touchscreens or accessibility.
};
};
};
};
}

View file

@ -66,7 +66,6 @@ in {
git git
btop btop
comma comma
snowfallorg.flake
]; ];
programs.bash = { programs.bash = {
shellAliases = { shellAliases = {

View file

@ -1,61 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.presets.gaming;
in {
options.${namespace}.presets.gaming = with types; {
enable = mkBoolOpt false "Enable everything that you need for gaming";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
unzip
wget
xdotool
xorg.xprop
xorg.xrandr
unixtools.xxd
xorg.xwininfo
yad
protonup-qt
protontricks
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
package = pkgs.steam.override {
extraPkgs = pkgs:
with pkgs; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
sdl3
SDL2
stdenv.cc.cc.lib
libkrb5
keyutils
gamescope
];
};
};
programs.gamemode.enable = true;
};
}

View file

@ -1,34 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.presets.wayland;
in {
options.${namespace}.presets.wayland = with types; {
enable = mkBoolOpt false "Enable preset with MUST HAVE wayland things";
};
config = mkIf cfg.enable {
environment.sessionVariables = {
NIXOS_OZONE_WL = "1";
};
environment.systemPackages = with pkgs; [
wl-clipboard
git-credential-manager
egl-wayland
pwvucontrol
];
hardware.graphics.enable = true;
};
}

View file

@ -1,134 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.presets.workstation;
in {
options.${namespace}.presets.workstation = with types; {
enable = mkBoolOpt false "Enable workstation preset";
};
config = mkIf cfg.enable {
${namespace} = {
presets.default = enabled;
presets.wayland = enabled;
hardware.printing = enabled;
hardware.bluetooth = enabled;
#programs.fastfetch = {
# enable = true;
# firstNixOSInstall = 1729112485;
#};
gpg = enabled;
services.syncthing = {
enable = true;
user = "kylekrein";
};
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
networking.networkmanager.enable = true;
services.udisks2.enable = true;
environment.systemPackages = with pkgs;
with pkgs.${namespace}; [
rnote
libreoffice
root-files
gparted
qdirstat
exfatprogs
tealdeer
telegram-desktop
vlc
git-credential-manager
qpwgraph
solaar
pdfarranger
densify
gimp3
krita
inkscape
cameractrls-gtk4
#kde
kdePackages.gwenview
kdePackages.ark
shotwell
deploy-rs
custom.deploy-rs-online
];
programs.kdeconnect.enable = true;
programs.kdeconnect.package = lib.mkDefault pkgs.kdePackages.kdeconnect-kde;
fonts.packages = with pkgs; [
nerd-fonts.jetbrains-mono
font-awesome
nerd-fonts.symbols-only
hack-font
noto-fonts-emoji
# microsoft fonts:
#corefonts
#vistafonts
];
environment.sessionVariables = {
MANPAGER = "emacsclient -c";
EDITOR = "emacsclient -c";
};
hardware = {
logitech.wireless.enable = true;
};
security.polkit.enable = true;
services.flatpak = enabled;
#programs.thunar = {
# enable = true;
# plugins = with pkgs.xfce; [
# thunar-archive-plugin
# thunar-volman
# ];
# };
#programs.xfconf.enable = true; # so thunar can save config
#services.gvfs.enable = true; # Mount, trash, and other functionalities
#services.tumbler.enable = true; # Thumbnail support for images
#greeter
programs.dankMaterialShell.greeter = {
enable = config.${namespace}.windowManagers.niri.enable || config.programs.hyprland.enable;
compositor.name =
if config.${namespace}.windowManagers.niri.enable
then "niri"
else "hyprland";
configHome = let
imp = config.${namespace}.impermanence;
in "${
if imp.enable
then imp.persistentStorage
else ""
}${config.users.users.kylekrein.home}";
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
};
}

View file

@ -1,70 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.programs.dolphin;
in {
options.${namespace}.programs.dolphin = with types; {
enable = mkBoolOpt false "Enable dolphin on non Kde environments";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
kdePackages.qtwayland
kdePackages.qtsvg
kdePackages.kio-fuse #to mount remote filesystems via FUSE
kdePackages.kio-extras #extra protocols support (sftp, fish and more)
kdePackages.kio-admin
libheif #https://github.com/NixOS/nixpkgs/issues/164021
libheif.out
#kde
kdePackages.breeze-icons
kdePackages.breeze
kdePackages.kdesdk-thumbnailers
kdePackages.kdegraphics-thumbnailers
kdePackages.kservice
kdePackages.kdbusaddons
kdePackages.kfilemetadata
kdePackages.kconfig
kdePackages.kcoreaddons
kdePackages.kcrash
kdePackages.kguiaddons
kdePackages.ki18n
kdePackages.kitemviews
kdePackages.kwidgetsaddons
kdePackages.kwindowsystem
shared-mime-info
#kde support tools
#libsForQt5.qt5ct
#qt6ct
kdePackages.kimageformats
kdePackages.dolphin
kdePackages.dolphin-plugins
];
xdg = {
menus.enable = true;
mime.enable = true;
};
#https://discourse.nixos.org/t/dolphin-does-not-have-mime-associations/48985/3
# This fixes the unpopulated MIME menus
environment.etc."/xdg/menus/plasma-applications.menu".text = builtins.readFile "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
environment.etc."/xdg/menus/applications.menu".text = builtins.readFile "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
#environment.pathsToLink = [
# "share/thumbnailers"
#];
};
}

View file

@ -1,37 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
username = "andrej";
admin = false;
extraGroups = ["networkmanager"];
trustedSshKeys = [];
cfg = config.${namespace}.users.${username};
in {
options.${namespace}.users.${username} = with types; {
enable = mkBoolOpt false "Enable ${username} user";
config = mkOpt types.attrs {} "Additional home manager config for ${username}";
};
config = mkUser {
inherit config;
inherit (cfg) enable;
homeConfig = cfg.config;
inherit username;
inherit admin;
inherit extraGroups;
inherit trustedSshKeys;
};
}

View file

@ -19,6 +19,7 @@ with lib.${namespace}; let
trustedSshKeys = [ trustedSshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDdxZ5OyGcfD1JwEa4RWw86HWZ2dKFR0syrRckl7EvG kylekrein@kylekrein-homepc" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDdxZ5OyGcfD1JwEa4RWw86HWZ2dKFR0syrRckl7EvG kylekrein@kylekrein-homepc"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAWDM28XBxm4PFBNOouNWxqVmDj1ulUGEgHsRYoODCDG anaconda" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAWDM28XBxm4PFBNOouNWxqVmDj1ulUGEgHsRYoODCDG anaconda"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYO1JV6qkQM+EW2WY/RxDFihgSKuFHF1hVtzl+F9ye4 kylekrein@anaconda"
]; ];
cfg = config.${namespace}.users.${username}; cfg = config.${namespace}.users.${username};

View file

@ -1,37 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
username = "tania";
admin = false;
extraGroups = ["networkmanager" "touchscreen"];
trustedSshKeys = [];
cfg = config.${namespace}.users.${username};
in {
options.${namespace}.users.${username} = with types; {
enable = mkBoolOpt false "Enable ${username} user";
config = mkOpt types.attrs {} "Additional home manager config for ${username}";
};
config = mkUser {
inherit config;
inherit (cfg) enable;
homeConfig = cfg.config;
inherit username;
inherit admin;
inherit extraGroups;
inherit trustedSshKeys;
};
}

View file

@ -1,40 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.${namespace}; let
cfg = config.${namespace}.windowManagers.niri;
in {
options.${namespace}.windowManagers.niri = with types; {
enable = mkBoolOpt false "Enable Niri as your window manager";
};
config = mkIf cfg.enable {
${namespace} = {
programs.dolphin.enable = mkDefault true;
};
security.pam.services.quickshell = {};
programs.niri = {
enable = true;
package = pkgs.niri-unstable;
};
niri-flake.cache.enable = true;
environment.systemPackages = with pkgs; [
wl-clipboard
wayland-utils
libsecret
gamescope
xwayland-satellite-unstable
];
};
}

View file

@ -1,148 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.custom; {
facter.reportPath = ./facter.json;
custom = {
programs.dolphin = enabled;
presets.default = enabled;
presets.wayland = enabled;
presets.gaming = enabled;
hardware = {
#nvidia = enabled;
bluetooth = enabled;
printing = enabled;
};
users = {
kylekrein = {
enable = true;
};
andrej = {
enable = true;
};
};
presets.disko = {
ext4Swap = {
enable = true;
device = "/dev/sda";
swapSize = 16;
};
ext4 = {
enable = true;
device = "/dev/sdb";
mountpoint = "/home/andrej/SteamGames";
};
};
};
#greeter
programs.dankMaterialShell.greeter = {
enable = config.${namespace}.windowManagers.niri.enable || config.programs.hyprland.enable;
compositor.name =
if config.${namespace}.windowManagers.niri.enable
then "niri"
else "hyprland";
configHome = let
imp = config.${namespace}.impermanence;
in "${
if imp.enable
then imp.persistentStorage
else ""
}${config.users.users.andrej.home}";
};
services.flatpak = enabled;
security.pam.services.quickshell = {};
services.xserver = {
enable = true;
};
programs.hyprland = {
enable = true;
systemd.setPath = enabled;
};
networking.firewall.allowedTCPPorts = [22 25565];
networking.firewall.allowedUDPPorts = [22 25565];
security.polkit.enable = true;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
programs.kdeconnect.enable = true;
programs.kdeconnect.package = lib.mkDefault pkgs.kdePackages.kdeconnect-kde;
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 4d --keep 3";
flake = "/etc/nixos-config";
};
environment.systemPackages = with pkgs; [
libreoffice
fzf
killall
eza
fd
gparted
exfatprogs
lazygit
fastfetch
telegram-desktop
vlc
wl-clipboard
git
git-credential-manager
egl-wayland
btop
obs-studio
blender
vscodium-fhs
discord
solaar
element-desktop
prismlauncher
mcpelauncher-ui-qt
jdk
teams-for-linux
];
systemd.network.wait-online.enable = lib.mkForce false;
networking.wireless.enable = mkForce false;
networking.networkmanager.enable = true;
services.udisks2.enable = true;
services.zerotierone = {
enable = true;
joinNetworks = [
"a09acf0233dccb4a"
"1d71939404962783"
"41d49af6c260338d"
];
};
# ======================== DO NOT CHANGE THIS ========================
system.stateVersion = "24.11";
# ======================== DO NOT CHANGE THIS ========================
}

File diff suppressed because it is too large Load diff

View file

@ -1,75 +0,0 @@
{
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 = false;
swapFileOffset = 533760;
};
custom.presets.disko.impermanenceBtrfsLuks = {
enable = true;
swapSize = 64;
};
custom.hardware.framework12 = enabled;
custom.hardware.secureBoot = enabled;
custom.hardware.tablet.inputDevice = "/dev/input/by-path/platform-gpio-keys.9.auto-event";
custom.impermanence = enabled;
custom.presets.workstation = enabled;
custom.presets.gaming = enabled;
custom.windowManagers.niri = enabled;
custom.services.ai = {
enable = true;
models = ["qwq" "llama3.1" "qwen2.5-coder:7b"];
ui = disabled;
};
custom.users.kylekrein = {
enable = true;
config = niri-config;
};
environment.systemPackages = with pkgs; [
blender
video-downloader
];
#services.fprintd.enable = true;
#services.fprintd.tod.enable = true;
#services.fprintd.tod.driver = pkgs.libfprint-2-tod1-elan;
services.power-profiles-daemon.enable = true;
services.tlp.enable = false;
#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

View file

@ -1,81 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}: let
niri-outputs = {
programs.niri.settings.outputs = {
"DP-1" = {
scale = 1.6;
position.x = 1600;
position.y = 0;
};
"DP-3" = {
scale = 1.6;
position.x = 0;
position.y = 0;
};
};
};
in
with lib;
with lib.${namespace}; {
facter.reportPath = ./facter.json;
systemd.network.wait-online.enable = lib.mkForce false; #facter
custom.hardware.nvidia = enabled;
services.scx.enable = true; # by default uses scx_rustland scheduler
boot.kernelPackages = lib.mkForce pkgs.linuxPackages_cachyos;
system.modulesTree = [pkgs.linux_cachyos.modules];
custom.impermanence = enabled;
custom.presets.workstation = enabled;
custom.presets.gaming = enabled;
custom.presets.disko.impermanenceBtrfs = {
enable = true;
device = "/dev/nvme0n1";
swapSize = 32;
};
custom.windowManagers.niri = enabled;
custom.services.ai = {
enable = true;
models = ["qwq" "llama3.1" "qwen2.5-coder:7b" "gpt-oss:20b" "gpt-oss:120b"];
};
custom.users = {
kylekrein = {
enable = true;
config = niri-outputs;
};
tania = {
inherit (config.custom.users.kylekrein) enable config;
};
};
environment.systemPackages = with pkgs; [
blender
];
services.zerotierone = {
enable = true;
port = 9994;
joinNetworks = [
"A84AC5C10AD269CA"
"db64858fed285e0f"
];
};
#Chat host
networking.firewall.allowedTCPPorts = [80 443 22 8448 9993 8081] ++ [config.services.zerotierone.port];
networking.firewall.allowedUDPPorts = [config.services.zerotierone.port];
# ======================== DO NOT CHANGE THIS ========================
system.stateVersion = "25.05";
# ======================== DO NOT CHANGE THIS ========================
}

File diff suppressed because it is too large Load diff

View file

@ -1,155 +0,0 @@
{
lib,
pkgs,
inputs,
namespace,
system,
target,
format,
virtual,
systems,
config,
...
}:
with lib;
with lib.custom; {
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
custom = {
presets.default = enabled;
users.kylekrein = {
enable = true;
config = {};
};
services.conduwuit = {
enable = true;
#user = "turnserver";
settings = {
global = {
server_name = "kylekrein.com";
well_known = {
server = "matrix.kylekrein.com:443";
client = "https://matrix.kylekrein.com";
};
port = [6167];
trusted_servers = ["matrix.org"];
allow_registration = false;
registration_token = null; #nix shell nixpkgs#openssl -c openssl rand -base64 48 | tr -d '/+' | cut -c1-64
allow_federation = true;
allow_encryption = true;
allow_local_presence = true;
require_auth_for_profile_requests = true;
};
};
extraEnvironment = {
};
};
};
services.caddy = {
enable = true;
#virtualHosts."kylekrein.com:8448".extraConfig = ''
# reverse_proxy http://localhost:6167
#'';
virtualHosts."kylekrein.com".extraConfig = ''
handle_path /.well-known/matrix/* {
header Access-Control-Allow-Origin *
## `Content-Type: application/json` isn't required by the matrix spec
## but some browsers (firefox) and some other tooling might preview json
## content prettier when they are made aware via Content-Type
header Content-Type application/json
respond /client `{ "m.homeserver": { "base_url": "https://matrix.kylekrein.com/" }, "org.matrix.msc3575.proxy": { "url": "https://matrix.kylekrein.com/"}, "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", "livekit_service_url": "https://livekit-jwt.call.matrix.org" } ] }`
respond /server `{ "m.server": "matrix.kylekrein.com:443" }`
## return http/404 if nothing matches
respond 404
}
respond /.well-known/element/element.json `{"call":{"widget_url":"https://call.element.io"}}`
reverse_proxy * http://localhost:6167
'';
# reverse_proxy /.well-known/* http://localhost:6167
#'';
virtualHosts."matrix.kylekrein.com".extraConfig = ''
handle_path /.well-known/matrix/* {
header Access-Control-Allow-Origin *
## `Content-Type: application/json` isn't required by the matrix spec
## but some browsers (firefox) and some other tooling might preview json
## content prettier when they are made aware via Content-Type
header Content-Type application/json
respond /client `{ "m.homeserver": { "base_url": "https://matrix.kylekrein.com/" }, "org.matrix.msc3575.proxy": { "url": "https://matrix.kylekrein.com/"}, "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", "livekit_service_url": "https://livekit-jwt.call.matrix.org" } ] }`
respond /server `{ "m.server": "https://matrix.kylekrein.com" }`
## return http/404 if nothing matches
respond 404
}
respond /.well-known/element/element.json `{"call":{"widget_url":"https://call.element.io"}}`
reverse_proxy * http://localhost:6167
'';
virtualHosts."uptime.kylekrein.com".extraConfig = ''
reverse_proxy * http://localhost:4621
'';
#virtualHosts."gitlab.kylekrein.com".extraConfig = ''
# reverse_proxy * unix//run/gitlab/gitlab-workhorse.socket
#'';
};
services.uptime-kuma = {
enable = true;
settings = {
PORT = "4621";
HOST = "127.0.0.1";
};
appriseSupport = true;
};
#Chat host
networking.firewall.allowedTCPPorts = [80 443 22 8448];
networking.firewall.allowedUDPPorts = [3478 5349];
#sops.secrets."services/conduwuit" = {mode = "0755";};
#sops.secrets."services/gitlab/dbPassword" = {owner = "gitlab";};
#sops.secrets."services/gitlab/rootPassword" = {owner = "gitlab";};
#sops.secrets."services/gitlab/secret" = {owner = "gitlab";};
#sops.secrets."services/gitlab/otpsecret" = {owner = "gitlab";};
#sops.secrets."services/gitlab/dbsecret" = {owner = "gitlab";};
#sops.secrets."services/gitlab/oidcKeyBase" = {owner = "gitlab";};
#sops.secrets."services/gitlab/activeRecordSalt" = {owner = "gitlab";};
#sops.secrets."services/gitlab/activeRecordPrimaryKey" = {owner = "gitlab";};
#sops.secrets."services/gitlab/activeRecordDeterministicKey" = {owner = "gitlab";};
services.gitlab = {
enable = false;
host = "gitlab.kylekrein.com";
https = true;
port = 443;
#statePath = "/persist/gitlab/state";
backup.startAt = "3:00";
databasePasswordFile = config.sops.secrets."services/gitlab/dbPassword".path;
initialRootPasswordFile = config.sops.secrets."services/gitlab/rootPassword".path;
secrets = {
secretFile = config.sops.secrets."services/gitlab/secret".path;
otpFile = config.sops.secrets."services/gitlab/otpsecret".path;
dbFile = config.sops.secrets."services/gitlab/dbsecret".path;
jwsFile = config.sops.secrets."services/gitlab/oidcKeyBase".path; #pkgs.runCommand "oidcKeyBase" {} "${pkgs.openssl}/bin/openssl genrsa 2048 > $out";
activeRecordSaltFile = config.sops.secrets."services/gitlab/activeRecordSalt".path;
activeRecordPrimaryKeyFile = config.sops.secrets."services/gitlab/activeRecordPrimaryKey".path;
activeRecordDeterministicKeyFile = config.sops.secrets."services/gitlab/activeRecordDeterministicKey".path;
};
};
systemd.services.gitlab-backup.environment.BACKUP = "dump";
boot.tmp.cleanOnBoot = true;
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
boot.loader.systemd-boot.enable = mkForce false;
# ======================== DO NOT CHANGE THIS ========================
system.stateVersion = "24.11";
# ======================== DO NOT CHANGE THIS ========================
}

View file

@ -1,32 +0,0 @@
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = [];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/4f7e141c-0fc7-415a-815d-944b36f93806";
fsType = "ext4";
};
swapDevices = [];
# 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.eth0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -1,48 +0,0 @@
{lib, ...}: {
# This file was populated at runtime with the networking
# details gathered from the active system.
networking = {
nameservers = [
"8.8.8.8"
];
defaultGateway = "172.31.1.1";
defaultGateway6 = {
address = "";
interface = "eth0";
};
dhcpcd.enable = false;
usePredictableInterfaceNames = lib.mkForce false;
interfaces = {
eth0 = {
ipv4.addresses = [
{
address = "91.99.0.169";
prefixLength = 32;
}
];
ipv6.addresses = [
{
address = "fe80::9400:4ff:fe30:830e";
prefixLength = 64;
}
];
ipv4.routes = [
{
address = "172.31.1.1";
prefixLength = 32;
}
];
ipv6.routes = [
{
address = "";
prefixLength = 128;
}
];
};
};
};
services.udev.extraRules = ''
ATTR{address}=="96:00:04:30:83:0e", NAME="eth0"
'';
}

View file

@ -112,6 +112,7 @@ in {
custom.impermanence = enabled; custom.impermanence = enabled;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
quickemu
ente-cli ente-cli
tmux tmux
icloudpd icloudpd
@ -128,6 +129,13 @@ in {
"rtw89_8852ce" "rtw89_8852ce"
]; ];
programs.virt-manager.enable = false;
users.groups.libvirtd.members = ["kylekrein"];
virtualisation.libvirtd.enable = true;
custom.users.kylekrein = { custom.users.kylekrein = {
enable = true; enable = true;
config = {}; config = {};

View file

@ -73,4 +73,5 @@ in {
}; };
}; };
}; };
fileSystems."/var/lib".neededForBoot = true;
} }

View file

@ -16,7 +16,7 @@
virtualisation.oci-containers.backend = "podman"; virtualisation.oci-containers.backend = "podman";
virtualisation.oci-containers.containers.aliasvault = { virtualisation.oci-containers.containers.aliasvault = {
image = "ghcr.io/aliasvault/aliasvault:0.25.0"; image = "ghcr.io/aliasvault/aliasvault:0.26.6";
autoStart = true; autoStart = true;
ports = [ ports = [

View file

@ -4,15 +4,8 @@
config, config,
... ...
}: { }: {
systemd.services.navidrome.serviceConfig.ExecStart = with lib; let
cfg = config.services.navidrome;
settingsFormat = pkgs.formats.toml {};
in
mkForce ''
${pkgs.bash}/bin/bash -c "${getExe cfg.package} --configfile '${settingsFormat.generate "navidrome.toml" cfg.settings}'"
'';
services.navidrome = { services.navidrome = {
enable = true; enable = false; #doesnt build 24.02.2026
settings = { settings = {
Scanner.Schedule = "@every 24h"; Scanner.Schedule = "@every 24h";
MusicFolder = "/zstorage/media/music"; MusicFolder = "/zstorage/media/music";

View file

@ -34,6 +34,7 @@ in {
sops.secrets."services/nextcloud/whiteboard" = {owner = "nextcloud";}; sops.secrets."services/nextcloud/whiteboard" = {owner = "nextcloud";};
services.nextcloud = { services.nextcloud = {
enable = true; enable = true;
maxUploadSize = "80G";
package = pkgs.nextcloud32; package = pkgs.nextcloud32;
database.createLocally = true; database.createLocally = true;
config = { config = {

View file

@ -35,6 +35,9 @@ in {
enableACME = true; enableACME = true;
forceSSL = true; forceSSL = true;
locations = config.services.nginx.virtualHosts."matrix.kylekrein.com".locations; locations = config.services.nginx.virtualHosts."matrix.kylekrein.com".locations;
extraConfig = ''
client_max_body_size 1G;
'';
}; };
"turn.kylekrein.com" = { "turn.kylekrein.com" = {
@ -71,6 +74,9 @@ in {
enableACME = true; enableACME = true;
forceSSL = true; forceSSL = true;
locations = matrixLocations; locations = matrixLocations;
extraConfig = ''
client_max_body_size 1G;
'';
}; };
"immich.kylekrein.com" = { "immich.kylekrein.com" = {