This commit is contained in:
mjallen18
2025-07-24 11:06:08 -05:00
parent f05972d6ae
commit 3d213c8769
164 changed files with 1777 additions and 1257 deletions

View File

@@ -1,6 +1,7 @@
{ {
inputs, inputs,
pkgs, pkgs,
lib,
... ...
}: }:
let let
@@ -11,8 +12,8 @@ pre-commit-hooks-nix.lib.${pkgs.system}.run {
hooks = { hooks = {
pre-commit-hook-ensure-sops.enable = true; pre-commit-hook-ensure-sops.enable = true;
treefmt = { treefmt = {
enable = true; enable = lib.mkForce true;
settings.fail-on-change = false; settings.fail-on-change = lib.mkForce false;
packageOverrides.treefmt = inputs.treefmt-nix.lib.mkWrapper pkgs ../../treefmt.nix; packageOverrides.treefmt = inputs.treefmt-nix.lib.mkWrapper pkgs ../../treefmt.nix;
}; };
}; };

315
flake.nix
View File

@@ -6,8 +6,8 @@
# The name "snowfall-lib" is required due to how Snowfall Lib processes your # The name "snowfall-lib" is required due to how Snowfall Lib processes your
# flake's inputs. # flake's inputs.
snowfall-lib = { snowfall-lib = {
url = "github:snowfallorg/lib"; url = "github:snowfallorg/lib";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
@@ -84,179 +84,180 @@
}; };
# We will handle this in the next section. # We will handle this in the next section.
outputs = inputs: outputs =
inputs.snowfall-lib.mkFlake { inputs:
# You must provide our flake inputs to Snowfall Lib. inputs.snowfall-lib.mkFlake {
inherit inputs; # You must provide our flake inputs to Snowfall Lib.
inherit inputs;
# The `src` must be the root of the flake. See configuration # The `src` must be the root of the flake. See configuration
# in the next section for information on how you can move your # in the next section for information on how you can move your
# Nix files to a separate directory. # Nix files to a separate directory.
src = ./.; src = ./.;
# Add a module to a specific host. # Add a module to a specific host.
systems = { systems = {
# common modules # common modules
modules.nixos = with inputs; [ modules.nixos = with inputs; [
authentik-nix.nixosModules.default authentik-nix.nixosModules.default
chaotic.nixosModules.default chaotic.nixosModules.default
crowdsec.nixosModules.crowdsec crowdsec.nixosModules.crowdsec
crowdsec.nixosModules.crowdsec-firewall-bouncer crowdsec.nixosModules.crowdsec-firewall-bouncer
disko.nixosModules.disko disko.nixosModules.disko
impermanence.nixosModules.impermanence impermanence.nixosModules.impermanence
lanzaboote.nixosModules.lanzaboote lanzaboote.nixosModules.lanzaboote
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
];
# common darwin modules
modules.darwin = with inputs; [
nix-homebrew.darwinModules.nix-homebrew
home-manager.darwinModules.home-manager
];
# Host config
hosts = {
# ######################################################
# Desktop #
# ######################################################
desktop = {
modules = with inputs; [
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# NAS #
# ######################################################
nas = {
modules = with inputs; [
nixos-hardware.nixosModules.common-pc
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-hidpi
home-manager.nixosModules.home-manager
];
# overlays = with inputs; [ crowdsec.overlays.default ];
};
# ######################################################
# Steamdeck #
# ######################################################
steamdeck = {
modules = with inputs; [
disko.nixosModules.disko
jovian.nixosModules.jovian
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# NUC #
# ######################################################
nuc = {
modules = with inputs; [
disko.nixosModules.disko
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# Pi4 #
# ######################################################
pi4 = {
modules = with inputs; [
disko.nixosModules.disko
nixos-raspberrypi.nixosModules.raspberry-pi-4.base
nixos-raspberrypi.nixosModules.raspberry-pi-4.display-vc4
nixos-raspberrypi.lib.inject-overlays
];
};
# ######################################################
# Pi5 #
# ######################################################
pi5 = {
modules = with inputs; [
disko.nixosModules.disko
nixos-raspberrypi.nixosModules.raspberry-pi-5.base
nixos-raspberrypi.nixosModules.raspberry-pi-5.display-vc4
nixos-raspberrypi.nixosModules.raspberry-pi-5.bluetooth
nixos-raspberrypi.lib.inject-overlays
];
};
# ######################################################
# Mac #
# ######################################################
macbook-pro-nixos = {
modules = with inputs; [
nixos-apple-silicon.nixosModules.default
];
};
};
overlays = with inputs; [ nix-vscode-extensions.overlays.default ];
homes = {
modules = with inputs; [
nix-index-database.homeModules.nix-index
sops-nix.homeManagerModules.sops
]; ];
overlays = with inputs; [ # common darwin modules
nix-vscode-extensions.overlays.default modules.darwin = with inputs; [
nix-homebrew.darwinModules.nix-homebrew
home-manager.darwinModules.home-manager
]; ];
users = { # Host config
# "matt@desktop" = { hosts = {
# modules = with inputs; [ # ######################################################
# sops-nix.homeManagerModules.sops # Desktop #
# ]; # ######################################################
# }; desktop = {
"deck@steamdeck" = {
modules = with inputs; [ modules = with inputs; [
steam-rom-manager.homeManagerModules.default nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# NAS #
# ######################################################
nas = {
modules = with inputs; [
nixos-hardware.nixosModules.common-pc
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-hidpi
home-manager.nixosModules.home-manager
];
# overlays = with inputs; [ crowdsec.overlays.default ];
};
# ######################################################
# Steamdeck #
# ######################################################
steamdeck = {
modules = with inputs; [
disko.nixosModules.disko
jovian.nixosModules.jovian
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# NUC #
# ######################################################
nuc = {
modules = with inputs; [
disko.nixosModules.disko
nixos-hardware.nixosModules.common-cpu-amd
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-cpu-amd-zenpower
nixos-hardware.nixosModules.common-gpu-amd
nixos-hardware.nixosModules.common-hidpi
nixos-hardware.nixosModules.common-pc
];
};
# ######################################################
# Pi4 #
# ######################################################
pi4 = {
modules = with inputs; [
disko.nixosModules.disko
nixos-raspberrypi.nixosModules.raspberry-pi-4.base
nixos-raspberrypi.nixosModules.raspberry-pi-4.display-vc4
nixos-raspberrypi.lib.inject-overlays
];
};
# ######################################################
# Pi5 #
# ######################################################
pi5 = {
modules = with inputs; [
disko.nixosModules.disko
nixos-raspberrypi.nixosModules.raspberry-pi-5.base
nixos-raspberrypi.nixosModules.raspberry-pi-5.display-vc4
nixos-raspberrypi.nixosModules.raspberry-pi-5.bluetooth
nixos-raspberrypi.lib.inject-overlays
];
};
# ######################################################
# Mac #
# ######################################################
macbook-pro-nixos = {
modules = with inputs; [
nixos-apple-silicon.nixosModules.default
]; ];
}; };
}; };
overlays = with inputs; [ nix-vscode-extensions.overlays.default ];
homes = {
modules = with inputs; [
nix-index-database.homeModules.nix-index
sops-nix.homeManagerModules.sops
];
overlays = with inputs; [
nix-vscode-extensions.overlays.default
];
users = {
# "matt@desktop" = {
# modules = with inputs; [
# sops-nix.homeManagerModules.sops
# ];
# };
"deck@steamdeck" = {
modules = with inputs; [
steam-rom-manager.homeManagerModules.default
];
};
};
};
}; };
};
# Configure Snowfall Lib, all of these settings are optional. # Configure Snowfall Lib, all of these settings are optional.
snowfall = { snowfall = {
# Choose a namespace to use for your flake's packages, library, # Choose a namespace to use for your flake's packages, library,
# and overlays. # and overlays.
namespace = "mjallen"; namespace = "mjallen";
# Add flake metadata that can be processed by tools like Snowfall Frost. # Add flake metadata that can be processed by tools like Snowfall Frost.
meta = { meta = {
# A slug to use in documentation when displaying things like file paths. # A slug to use in documentation when displaying things like file paths.
name = "mjallen"; name = "mjallen";
# A title to show for your flake, typically the name. # A title to show for your flake, typically the name.
title = "mjallen Flake"; title = "mjallen Flake";
};
};
outputs-builder = channels: {
formatter = inputs.treefmt-nix.lib.mkWrapper channels.nixpkgs ./treefmt.nix;
}; };
}; };
outputs-builder = channels: {
formatter = inputs.treefmt-nix.lib.mkWrapper channels.nixpkgs ./treefmt.nix;
};
};
} }

View File

@@ -1,4 +1,9 @@
{ lib, pkgs, home, ... }: {
lib,
pkgs,
home,
...
}:
let let
shellAliases = { shellAliases = {
update-switch = "darwin-rebuild switch --flake ~/nix-config"; update-switch = "darwin-rebuild switch --flake ~/nix-config";

View File

@@ -41,7 +41,6 @@ in
"name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)" "name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)"
]; ];
windowRule = [ windowRule = [
"size 2160 3356, tag:horizonrdp" "size 2160 3356, tag:horizonrdp"
]; ];
@@ -95,7 +94,7 @@ in
tooltip = false; tooltip = false;
exec = "waybar-hass --get_light light.living_room_lights"; exec = "waybar-hass --get_light light.living_room_lights";
interval = "once"; interval = "once";
format = "{text}";#"󱉓"; format = "{text}"; # "󱉓";
on-click = "waybar-hass --toggle_light light.living_room_lights"; on-click = "waybar-hass --toggle_light light.living_room_lights";
return-type = "json"; return-type = "json";
}; };

View File

@@ -1,4 +1,4 @@
{ lib, ... }: { lib, ... }:
let let
shellAliases = { shellAliases = {
ll = "ls -alh"; ll = "ls -alh";
@@ -19,40 +19,40 @@ in
home.username = "matt"; home.username = "matt";
sops = { sops = {
age.keyFile = "/home/matt/.config/sops/age/keys.txt"; age.keyFile = "/home/matt/.config/sops/age/keys.txt";
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml"; defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
validateSopsFiles = false; validateSopsFiles = false;
secrets = { secrets = {
"ssh-keys-public/pi4" = { "ssh-keys-public/pi4" = {
path = "/home/matt/.ssh/id_ed25519.pub"; path = "/home/matt/.ssh/id_ed25519.pub";
mode = "0644"; mode = "0644";
}; };
"ssh-keys-private/pi4" = { "ssh-keys-private/pi4" = {
path = "/home/matt/.ssh/id_ed25519"; path = "/home/matt/.ssh/id_ed25519";
mode = "0600"; mode = "0600";
}; };
# "ssh-keys-public/desktop-nixos" = { # "ssh-keys-public/desktop-nixos" = {
# path = "/home/matt/.ssh/authorized_keys"; # path = "/home/matt/.ssh/authorized_keys";
# mode = "0600"; # mode = "0600";
# }; # };
# "ssh-keys-public/desktop-nixos-root" = { # "ssh-keys-public/desktop-nixos-root" = {
# path = "/home/matt/.ssh/authorized_keys2"; # path = "/home/matt/.ssh/authorized_keys2";
# mode = "0600"; # mode = "0600";
# }; # };
# "ssh-keys-public/desktop-windows" = { # "ssh-keys-public/desktop-windows" = {
# path = "/home/matt/.ssh/authorized_keys3"; # path = "/home/matt/.ssh/authorized_keys3";
# mode = "0600"; # mode = "0600";
# }; # };
# "ssh-keys-public/macbook-macos" = { # "ssh-keys-public/macbook-macos" = {
# path = "/home/matt/.ssh/authorized_keys4"; # path = "/home/matt/.ssh/authorized_keys4";
# mode = "0600"; # mode = "0600";
# }; # };
}; };
}; };
programs = { programs = {
mangohud.enable = lib.mkForce true; mangohud.enable = lib.mkForce true;

View File

@@ -1,4 +1,10 @@
{ pkgs, lib, config, namespace, ... }: {
pkgs,
lib,
config,
namespace,
...
}:
let let
shellAliases = { shellAliases = {
update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3"; update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3";

View File

@@ -1,4 +1,4 @@
{ pkgs,... }: { pkgs, ... }:
let let
shellAliases = { shellAliases = {
update-boot = "sudo nixos-rebuild boot --max-jobs 10"; update-boot = "sudo nixos-rebuild boot --max-jobs 10";

View File

@@ -44,7 +44,15 @@ in
enable = true; enable = true;
package = pkgs.dolphin-emu; package = pkgs.dolphin-emu;
romFolder = "gc"; romFolder = "gc";
fileTypes = [ ".iso" ".ISO" ".gcm" ".GCM" ".ciso" ".CISO" "rvz" ]; fileTypes = [
".iso"
".ISO"
".gcm"
".GCM"
".ciso"
".CISO"
"rvz"
];
extraArgs = "-b -e \"\${filePath}\""; extraArgs = "-b -e \"\${filePath}\"";
}; };

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.mjallen.desktop.gnome; cfg = config.mjallen.desktop.gnome;
in in

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.mjallen.desktop.hyprland; cfg = config.mjallen.desktop.hyprland;
@@ -345,7 +350,7 @@ in
", swipe:3:ld, exec, foot" ", swipe:3:ld, exec, foot"
# tap with 3 fingers # tap with 3 fingers
", tap:3, exec, foot" ", tap:3, exec, foot"
# longpress can trigger mouse binds: # longpress can trigger mouse binds:
", longpress:2, movewindow" ", longpress:2, movewindow"
@@ -390,14 +395,16 @@ in
}; };
}; };
extraConfig = '' extraConfig =
exec-once = dbus-update-activation-environment --systemd --all ''
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = dbus-update-activation-environment --systemd --all
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = xhost +SI:localuser:root exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = nwg-look -a exec-once = xhost +SI:localuser:root
exec-once = nwg-dock-hyprland -d exec-once = nwg-look -a
'' + cfg.extraConfig or ''''; exec-once = nwg-dock-hyprland -d
''
+ cfg.extraConfig or '''';
}; };
}; };
} }

View File

@@ -45,31 +45,31 @@ with lib;
wallpaper = mkOption { wallpaper = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
description = "list of hyprland wallpaper configs"; description = "list of hyprland wallpaper configs";
}; };
monitor = mkOption { monitor = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
description = "list of hyprland monitor configs"; description = "list of hyprland monitor configs";
}; };
monitorv2 = mkOption { monitorv2 = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
description = "list of hyprland monitorv2 configs"; description = "list of hyprland monitorv2 configs";
}; };
workspace = mkOption { workspace = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
description = "list of hyprland workspace definitions"; description = "list of hyprland workspace definitions";
}; };
windowRule = mkOption { windowRule = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
description = "list of hyprland window rules"; description = "list of hyprland window rules";
}; };
@@ -92,14 +92,38 @@ with lib;
defaultApps = mkOption { defaultApps = mkOption {
type = types.submodule { type = types.submodule {
options = { options = {
browser = mkOption { type = types.package; default = pkgs.firefox; }; browser = mkOption {
editor = mkOption { type = types.package; default = pkgs.micro; }; type = types.package;
fileExplorer = mkOption { type = types.package; default = pkgs.nemo; }; default = pkgs.firefox;
visual = mkOption { type = types.package; default = pkgs.vscodium; }; };
terminal = mkOption { type = types.package; default = pkgs.kitty; }; editor = mkOption {
office = mkOption { type = types.package; default = pkgs.onlyoffice-bin_latest; }; type = types.package;
video = mkOption { type = types.package; default = pkgs.vlc; }; default = pkgs.micro;
imageViewer = mkOption { type = types.package; default = pkgs.nomacs; }; };
fileExplorer = mkOption {
type = types.package;
default = pkgs.nemo;
};
visual = mkOption {
type = types.package;
default = pkgs.vscodium;
};
terminal = mkOption {
type = types.package;
default = pkgs.kitty;
};
office = mkOption {
type = types.package;
default = pkgs.onlyoffice-bin_latest;
};
video = mkOption {
type = types.package;
default = pkgs.vlc;
};
imageViewer = mkOption {
type = types.package;
default = pkgs.nomacs;
};
}; };
}; };
description = "Default applications used across the system."; description = "Default applications used across the system.";

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.mjallen.desktop.hyprland; cfg = config.mjallen.desktop.hyprland;

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.hyprland; cfg = config.${namespace}.desktop.hyprland;
in in

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.hyprland; cfg = config.${namespace}.desktop.hyprland;
in in
@@ -7,41 +12,41 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs.hyprlock = { programs.hyprlock = {
enable = true; enable = true;
settings = { settings = {
background = [ background = [
{ {
monitor = ""; monitor = "";
path = cfg.wallpaper; # supports png, jpg, webp (no animations, though) path = cfg.wallpaper; # supports png, jpg, webp (no animations, though)
color = "rgba(25, 20, 20, 1.0)"; color = "rgba(25, 20, 20, 1.0)";
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
blur_passes = "3"; # 0 disables blurring blur_passes = "3"; # 0 disables blurring
blur_size = "7"; blur_size = "7";
noise = "0.0117"; noise = "0.0117";
contrast = "0.8916"; contrast = "0.8916";
brightness = "0.8172"; brightness = "0.8172";
vibrancy = "0.1696"; vibrancy = "0.1696";
vibrancy_darkness = "0.0"; vibrancy_darkness = "0.0";
} }
]; ];
input-field = [ input-field = [
{ {
size = "200, 50"; size = "200, 50";
position = "0, -80"; position = "0, -80";
monitor = cfg.primaryDisplay; monitor = cfg.primaryDisplay;
dots_center = true; dots_center = true;
fade_on_empty = true; fade_on_empty = true;
font_color = "rgb(202, 211, 245)"; font_color = "rgb(202, 211, 245)";
inner_color = "rgb(91, 96, 120)"; inner_color = "rgb(91, 96, 120)";
outer_color = "rgb(24, 25, 38)"; outer_color = "rgb(24, 25, 38)";
bothlock_color = -1; bothlock_color = -1;
outline_thickness = 5; outline_thickness = 5;
placeholder_text = ''<span foreground="##cad3f5">Password...</span>''; placeholder_text = ''<span foreground="##cad3f5">Password...</span>'';
shadow_passes = 2; shadow_passes = 2;
} }
]; ];
};
}; };
};
}; };
} }

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.hyprland; cfg = config.${namespace}.desktop.hyprland;
in in

View File

@@ -1,12 +1,17 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.mjallen.desktop.hyprland; cfg = config.mjallen.desktop.hyprland;
themeSize = "compact"; # [ "standard" "compact" ] themeSize = "compact"; # [ "standard" "compact" ]
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ] themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ] themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
themeColor = "dark"; # [ "standard" "light" "dark" ] themeColor = "dark"; # [ "standard" "light" "dark" ]
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ] iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ] iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]

View File

@@ -6,34 +6,34 @@ in
{ {
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.sessionVariables = { home.sessionVariables = {
BROWSER = "${cfg.defaultApps.browser.pname}"; BROWSER = "${cfg.defaultApps.browser.pname}";
CLUTTER_BACKEND = "wayland"; CLUTTER_BACKEND = "wayland";
EDITOR = "${cfg.defaultApps.editor.pname}"; EDITOR = "${cfg.defaultApps.editor.pname}";
VISUAL = "${cfg.defaultApps.visual.pname}"; VISUAL = "${cfg.defaultApps.visual.pname}";
ICON_THEME = cfg.iconThemeName; ICON_THEME = cfg.iconThemeName;
GTK_CSD = "0"; GTK_CSD = "0";
GTK_THEME = cfg.gtkThemeName; GTK_THEME = cfg.gtkThemeName;
GTK_USE_PORTAL = "1"; GTK_USE_PORTAL = "1";
HYPRCURSOR_THEME = config.home.pointerCursor.name; HYPRCURSOR_THEME = config.home.pointerCursor.name;
HYPRCURSOR_SIZE = config.home.pointerCursor.size; HYPRCURSOR_SIZE = config.home.pointerCursor.size;
MOZ_ENABLE_WAYLAND = "1"; MOZ_ENABLE_WAYLAND = "1";
NIXOS_OZONE_WL = "1"; NIXOS_OZONE_WL = "1";
NIXOS_XDG_OPEN_USE_PORTAL = "1"; NIXOS_XDG_OPEN_USE_PORTAL = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "1"; QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_QPA_PLATFORM = "wayland-egl"; QT_QPA_PLATFORM = "wayland-egl";
QT_QPA_PLATFORMTHEME = "gtk3"; QT_QPA_PLATFORMTHEME = "gtk3";
QT_SCALE_FACTOR = "1"; QT_SCALE_FACTOR = "1";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
SDL_VIDEODRIVER = "wayland"; SDL_VIDEODRIVER = "wayland";
TERMINAL = "${cfg.defaultApps.terminal.pname}"; TERMINAL = "${cfg.defaultApps.terminal.pname}";
XCURSOR_THEME = config.home.pointerCursor.name; XCURSOR_THEME = config.home.pointerCursor.name;
XCURSOR_SIZE = config.home.pointerCursor.size; XCURSOR_SIZE = config.home.pointerCursor.size;
XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_CACHE_HOME = "\${HOME}/.cache";
XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CONFIG_HOME = "\${HOME}/.config";
XDG_CURRENT_DESKTOP = "Hyprland"; XDG_CURRENT_DESKTOP = "Hyprland";
XDG_DATA_HOME = "\${HOME}/.local/share"; XDG_DATA_HOME = "\${HOME}/.local/share";
XDG_SESSION_DESKTOP = "Hyprland"; XDG_SESSION_DESKTOP = "Hyprland";
XDG_SESSION_TYPE = "wayland"; XDG_SESSION_TYPE = "wayland";
}; };
}; };
} }

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
home = { home = {
enableNixpkgsReleaseCheck = lib.mkDefault false; enableNixpkgsReleaseCheck = lib.mkDefault false;

View File

@@ -1,4 +1,10 @@
{ config, lib, pkgs, system, ... }: {
config,
lib,
pkgs,
system,
...
}:
let let
isArm = "aarch64-linux" == system; isArm = "aarch64-linux" == system;
open-remote-ssh = pkgs.vscode-utils.buildVscodeExtension { open-remote-ssh = pkgs.vscode-utils.buildVscodeExtension {
@@ -27,44 +33,48 @@ in
default = { default = {
enableUpdateCheck = false; enableUpdateCheck = false;
enableExtensionUpdateCheck = false; enableExtensionUpdateCheck = false;
extensions = with pkgs; [ extensions =
vscode-extensions.arrterian.nix-env-selector with pkgs;
vscode-extensions.bbenoist.nix [
vscode-extensions.brettm12345.nixfmt-vscode vscode-extensions.arrterian.nix-env-selector
vscode-extensions.cweijan.vscode-database-client2 vscode-extensions.bbenoist.nix
vscode-extensions.dendron.dendron-markdown-preview-enhanced vscode-extensions.brettm12345.nixfmt-vscode
vscode-extensions.jnoortheen.nix-ide vscode-extensions.cweijan.vscode-database-client2
vscode-extensions.mkhl.direnv vscode-extensions.dendron.dendron-markdown-preview-enhanced
vscode-extensions.ms-python.debugpy vscode-extensions.jnoortheen.nix-ide
vscode-extensions.ms-python.pylint vscode-extensions.mkhl.direnv
vscode-extensions.ms-python.python vscode-extensions.ms-python.debugpy
# vscode-extensions.ms-python.vscode-pylance vscode-extensions.ms-python.pylint
vscode-extensions.redhat.vscode-yaml vscode-extensions.ms-python.python
vscode-extensions.yy0931.vscode-sqlite3-editor # vscode-extensions.ms-python.vscode-pylance
vscode-extensions.redhat.vscode-yaml
vscode-extensions.yy0931.vscode-sqlite3-editor
# open-remote-ssh # open-remote-ssh
# nix-vscode-extensions.open-vsx.jeanp413.open-remote-ssh # nix-vscode-extensions.open-vsx.jeanp413.open-remote-ssh
# open-vsx.jeanp413.open-remote-ssh # open-vsx.jeanp413.open-remote-ssh
] ++ ( if !isArm then x86_only else [ ] ) ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ ]
{ ++ (if !isArm then x86_only else [ ])
name = "copilot-mcp"; ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
publisher = "automatalabs"; {
version = "0.0.49"; name = "copilot-mcp";
sha256 = "sha256-+G2OQl5SCN7bh7MzGdYiRclIZefBE7lWnGg1kNpCvnA="; publisher = "automatalabs";
} version = "0.0.49";
{ sha256 = "sha256-+G2OQl5SCN7bh7MzGdYiRclIZefBE7lWnGg1kNpCvnA=";
name = "mcp-server-runner"; }
publisher = "zebradev"; {
version = "0.1.0"; name = "mcp-server-runner";
sha256 = "sha256-StydVt3VzQUSS/pYp76jnIwtZlEj8gWAGzOARs93J+E="; publisher = "zebradev";
} version = "0.1.0";
{ sha256 = "sha256-StydVt3VzQUSS/pYp76jnIwtZlEj8gWAGzOARs93J+E=";
name = "claude-dev"; }
publisher = "saoudrizwan"; {
version = "3.17.9"; name = "claude-dev";
sha256 = "sha256-y3bFtMe5vZrO3DFb31KDvkzjD2jM76wK89mKhgJXC70="; publisher = "saoudrizwan";
} version = "3.17.9";
]; sha256 = "sha256-y3bFtMe5vZrO3DFb31KDvkzjD2jM76wK89mKhgJXC70=";
}
];
userSettings = { userSettings = {
@@ -110,10 +120,12 @@ in
# You can write arbitary Nix expressions here, to produce valid "options" declaration result. # You can write arbitary Nix expressions here, to produce valid "options" declaration result.
# Tip: for flake-based configuration, utilize `builtins.getFlake` # Tip: for flake-based configuration, utilize `builtins.getFlake`
"nixos" = { "nixos" = {
"expr" = "(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").nixosConfigurations.<name>.options"; "expr" =
"(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").nixosConfigurations.<name>.options";
}; };
"home-manager" = { "home-manager" = {
"expr" = "(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").homeConfigurations.<name>.options"; "expr" =
"(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").homeConfigurations.<name>.options";
}; };
# # Tip: use ${workspaceFolder} variable to define path # # Tip: use ${workspaceFolder} variable to define path
# "nix-darwin" = { # "nix-darwin" = {

View File

@@ -29,33 +29,33 @@ in
background_opacity = "0.85"; background_opacity = "0.85";
# The basic colors # The basic colors
foreground = nord.snowStorm.nord6; foreground = nord.snowStorm.nord6;
background = nord.polarNight.nord0; background = nord.polarNight.nord0;
selection_foreground = nord.polarNight.nord0; selection_foreground = nord.polarNight.nord0;
selection_background = nord.aurora.nord15; selection_background = nord.aurora.nord15;
# Cursor colors # Cursor colors
cursor = nord.aurora.nord15; cursor = nord.aurora.nord15;
cursor_text_color = nord.polarNight.nord0; cursor_text_color = nord.polarNight.nord0;
# URL underline color when hovering with mouse # URL underline color when hovering with mouse
url_color = nord.aurora.nord15; url_color = nord.aurora.nord15;
# Kitty window border colors # Kitty window border colors
active_border_color = nord.frost.nord10; active_border_color = nord.frost.nord10;
inactive_border_color = nord.polarNight.nord1; inactive_border_color = nord.polarNight.nord1;
bell_border_color = nord.aurora.nord13; bell_border_color = nord.aurora.nord13;
# OS Window titlebar colors # OS Window titlebar colors
wayland_titlebar_color = nord.polarNight.nord0; wayland_titlebar_color = nord.polarNight.nord0;
macos_titlebar_color = nord.polarNight.nord0; macos_titlebar_color = nord.polarNight.nord0;
# Tab bar colors # Tab bar colors
active_tab_foreground = nord.polarNight.nord3; active_tab_foreground = nord.polarNight.nord3;
active_tab_background = nord.aurora.nord15; active_tab_background = nord.aurora.nord15;
inactive_tab_foreground = nord.snowStorm.nord6; inactive_tab_foreground = nord.snowStorm.nord6;
inactive_tab_background = nord.polarNight.nord1; inactive_tab_background = nord.polarNight.nord1;
tab_bar_background = nord.polarNight.nord3; tab_bar_background = nord.polarNight.nord3;
# Colors for marks (marked text in the terminal) # Colors for marks (marked text in the terminal)
mark1_foreground = nord.polarNight.nord0; mark1_foreground = nord.polarNight.nord0;
@@ -86,11 +86,11 @@ in
color11 = nord.aurora.nord13; color11 = nord.aurora.nord13;
# blue # blue
color4 = nord.frost.nord10; color4 = nord.frost.nord10;
color12 = nord.frost.nord10; color12 = nord.frost.nord10;
# magenta # magenta
color5 = nord.aurora.nord15; color5 = nord.aurora.nord15;
color13 = nord.aurora.nord15; color13 = nord.aurora.nord15;
# cyan # cyan
@@ -98,7 +98,7 @@ in
color14 = nord.frost.nord8; color14 = nord.frost.nord8;
# white # white
color7 = nord.snowStorm.nord5; color7 = nord.snowStorm.nord5;
color15 = nord.snowStorm.nord4; color15 = nord.snowStorm.nord4;
}; };
}; };

View File

@@ -36,7 +36,8 @@
"browser.newtabpage.activity-stream.topSitesRows" = 3; # Set number of rows for top sites on new tab page "browser.newtabpage.activity-stream.topSitesRows" = 3; # Set number of rows for top sites on new tab page
"layout.css.light-dark.enabled" = true; # Enable light/dark theme support "layout.css.light-dark.enabled" = true; # Enable light/dark theme support
"extensions.activeThemeID" = "default-theme@mozilla.org"; # Set active theme "extensions.activeThemeID" = "default-theme@mozilla.org"; # Set active theme
"extensions.webextensions.uuids" = "{\"formautofill@mozilla.org\" =\"851c83b7-26d5-449c-8cc9-d8951a0ce78d\",\"pictureinpicture@mozilla.org\" =\"42fa2650-5134-4bef-bafa-b73f9ae51bad\",\"screenshots@mozilla.org\" =\"efd2b692-43c4-433a-aea5-0cb79f8312d4\",\"webcompat-reporter@mozilla.org\" =\"c43a6be2-fb56-4253-b384-ce8e09a89999\",\"webcompat@mozilla.org\" =\"e25fd1bb-7c53-413f-9528-bb922c322a56\",\"default-theme@mozilla.org\" =\"610b67c3-9145-46f7-814f-d8ee2cc8edff\",\"addons-search-detection@mozilla.com\:\"caedb3ca-5cf5-4e23-a251-d742f23e6fc8\",\"uBlock0@raymondhill.net\" =\"7e7d9fd9-12bf-42d3-9c7c-9ffd05420ec7\",\"78272b6fa58f4a1abaac99321d503a20@proton.me\" =\"7242a067-06d8-430b-94a3-00d264cdd57b\",\"addon@darkreader.org\" =\"2f02b112-6acd-4bdc-af2c-1432eb527339\",\"jid1-xUfzOsOFlzSOXg@jetpack\" =\"d0c72046-9903-4118-8160-a028840bf928\",\"chrome-gnome-shell@gnome.org\" =\"a1ab53e6-b765-4f25-8349-383cc04682a0\",\"user-agent-switcher@ninetailed.ninja\" =\"259d07cc-bb32-4ed5-b90f-6d73abdeb7bb\",\"firefoxdav@icloud.com\" =\"110e6e2c-18f8-461d-9f26-b8f04482b6f1\",\"ciscowebexstart1@cisco.com\" =\"a4062240-e73a-4353-bddb-d608d84881f7\",\"{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}\" =\"9164e437-812b-4a07-8dfd-2fd73b39329b\",\"{036a55b4-5e72-4d05-a06c-cba2dfcc134a}\" =\"648fc678-a6fb-47cd-9792-fb9520678c17\",\"{446900e4-71c2-419f-a6a7-df9c091e268b}\" =\"f0b43422-070e-466e-85c9-6543f209f075\",\"jid1-MnnxcxisBPnSXQ@jetpack\" =\"4c448202-c843-4cae-b5c3-d11f2da58fa3\",\"soundfixer@unrelenting.technology\" =\"59b35eb8-1c85-4919-a905-80d120993ddc\",\"floccus@handmadeideas.org\" =\"8ad2956c-8091-41af-a689-7d2108f5958d\",\"{79b9dbcf-cc5a-4cda-89ef-c4ab097eb074}\" =\"c2a223a7-32e0-4726-9f20-17236702b1f5\",\"linkgopher@oooninja.com\" =\"a257858c-0dce-415b-b123-6222876cf843\"}"; "extensions.webextensions.uuids" =
"{\"formautofill@mozilla.org\" =\"851c83b7-26d5-449c-8cc9-d8951a0ce78d\",\"pictureinpicture@mozilla.org\" =\"42fa2650-5134-4bef-bafa-b73f9ae51bad\",\"screenshots@mozilla.org\" =\"efd2b692-43c4-433a-aea5-0cb79f8312d4\",\"webcompat-reporter@mozilla.org\" =\"c43a6be2-fb56-4253-b384-ce8e09a89999\",\"webcompat@mozilla.org\" =\"e25fd1bb-7c53-413f-9528-bb922c322a56\",\"default-theme@mozilla.org\" =\"610b67c3-9145-46f7-814f-d8ee2cc8edff\",\"addons-search-detection@mozilla.com\:\"caedb3ca-5cf5-4e23-a251-d742f23e6fc8\",\"uBlock0@raymondhill.net\" =\"7e7d9fd9-12bf-42d3-9c7c-9ffd05420ec7\",\"78272b6fa58f4a1abaac99321d503a20@proton.me\" =\"7242a067-06d8-430b-94a3-00d264cdd57b\",\"addon@darkreader.org\" =\"2f02b112-6acd-4bdc-af2c-1432eb527339\",\"jid1-xUfzOsOFlzSOXg@jetpack\" =\"d0c72046-9903-4118-8160-a028840bf928\",\"chrome-gnome-shell@gnome.org\" =\"a1ab53e6-b765-4f25-8349-383cc04682a0\",\"user-agent-switcher@ninetailed.ninja\" =\"259d07cc-bb32-4ed5-b90f-6d73abdeb7bb\",\"firefoxdav@icloud.com\" =\"110e6e2c-18f8-461d-9f26-b8f04482b6f1\",\"ciscowebexstart1@cisco.com\" =\"a4062240-e73a-4353-bddb-d608d84881f7\",\"{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}\" =\"9164e437-812b-4a07-8dfd-2fd73b39329b\",\"{036a55b4-5e72-4d05-a06c-cba2dfcc134a}\" =\"648fc678-a6fb-47cd-9792-fb9520678c17\",\"{446900e4-71c2-419f-a6a7-df9c091e268b}\" =\"f0b43422-070e-466e-85c9-6543f209f075\",\"jid1-MnnxcxisBPnSXQ@jetpack\" =\"4c448202-c843-4cae-b5c3-d11f2da58fa3\",\"soundfixer@unrelenting.technology\" =\"59b35eb8-1c85-4919-a905-80d120993ddc\",\"floccus@handmadeideas.org\" =\"8ad2956c-8091-41af-a689-7d2108f5958d\",\"{79b9dbcf-cc5a-4cda-89ef-c4ab097eb074}\" =\"c2a223a7-32e0-4726-9f20-17236702b1f5\",\"linkgopher@oooninja.com\" =\"a257858c-0dce-415b-b123-6222876cf843\"}";
}; };
}; };
} }

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.mjallen.programs.nwg-dock; cfg = config.mjallen.programs.nwg-dock;

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.mjallen.programs.nwg-drawer; cfg = config.mjallen.programs.nwg-drawer;
@@ -11,42 +16,42 @@ in
home.packages = with pkgs; [ nwg-drawer ]; home.packages = with pkgs; [ nwg-drawer ];
home.file = { home.file = {
".config/nwg-drawer/drawer.css".text = '' ".config/nwg-drawer/drawer.css".text = ''
window { window {
background-color: ${nord.polarNight.nord0}bf; background-color: ${nord.polarNight.nord0}bf;
color: ${nord.snowStorm.nord5}00 color: ${nord.snowStorm.nord5}00
} }
/* search entry */ /* search entry */
entry { entry {
background-color: ${nord.polarNight.nord1}0f background-color: ${nord.polarNight.nord1}0f
} }
button, image { button, image {
background: none; background: none;
border: none border: none
} }
button:hover { button:hover {
background-color: ${nord.frost.nord10}1a background-color: ${nord.frost.nord10}1a
} }
/* in case you wanted to give category buttons a different look */ /* in case you wanted to give category buttons a different look */
#category-button { #category-button {
margin: 0 10px 0 10px margin: 0 10px 0 10px
} }
#pinned-box { #pinned-box {
padding-bottom: 5px; padding-bottom: 5px;
border-bottom: 1px dotted ${nord.polarNight.nord3} border-bottom: 1px dotted ${nord.polarNight.nord3}
} }
#files-box { #files-box {
padding: 5px; padding: 5px;
border: 1px dotted ${nord.polarNight.nord3}; border: 1px dotted ${nord.polarNight.nord3};
border-radius: 15px border-radius: 15px
} }
''; '';
}; };
}; };
} }

View File

@@ -1,4 +1,4 @@
{ config, lib, ... }: { config, lib, ... }:
with lib; with lib;
let let
cfg = config.mjallen.programs.nwg-panel; cfg = config.mjallen.programs.nwg-panel;
@@ -12,14 +12,14 @@ in
''; '';
".config/nwg-panel/preferred-apps.json".text = '' ".config/nwg-panel/preferred-apps.json".text = ''
{ {
"\\.pdf$": "${cfg.defaultApps.browser.pname}", "\\.pdf$": "${cfg.defaultApps.browser.pname}",
"\\.svg$": "inkscape", "\\.svg$": "inkscape",
"\\.(jpg|png|tiff|gif)$": "${cfg.defaultApps.imageViewer.pname}", "\\.(jpg|png|tiff|gif)$": "${cfg.defaultApps.imageViewer.pname}",
"\\.(mp3|ogg|flac|wav|wma)$": "audacious", "\\.(mp3|ogg|flac|wav|wma)$": "audacious",
"\\.(avi|mp4|mkv|mov|wav)$": "${cfg.defaultApps.video.pname}", "\\.(avi|mp4|mkv|mov|wav)$": "${cfg.defaultApps.video.pname}",
"\\.(doc|docx|xls|xlsx)$": "${cfg.defaultApps.office.pname}" "\\.(doc|docx|xls|xlsx)$": "${cfg.defaultApps.office.pname}"
} }
''; '';
}; };
}; };

View File

@@ -7,14 +7,38 @@ with lib;
defaultApps = mkOption { defaultApps = mkOption {
type = types.submodule { type = types.submodule {
options = { options = {
browser = mkOption { type = types.package; default = pkgs.firefox; }; browser = mkOption {
editor = mkOption { type = types.package; default = pkgs.micro; }; type = types.package;
fileExplorer = mkOption { type = types.package; default = pkgs.nemo; }; default = pkgs.firefox;
visual = mkOption { type = types.package; default = pkgs.vscodium; }; };
terminal = mkOption { type = types.package; default = pkgs.kitty; }; editor = mkOption {
office = mkOption { type = types.package; default = pkgs.onlyoffice-bin_latest; }; type = types.package;
video = mkOption { type = types.package; default = pkgs.vlc; }; default = pkgs.micro;
imageViewer = mkOption { type = types.package; default = pkgs.gnome-photos; }; };
fileExplorer = mkOption {
type = types.package;
default = pkgs.nemo;
};
visual = mkOption {
type = types.package;
default = pkgs.vscodium;
};
terminal = mkOption {
type = types.package;
default = pkgs.kitty;
};
office = mkOption {
type = types.package;
default = pkgs.onlyoffice-bin_latest;
};
video = mkOption {
type = types.package;
default = pkgs.vlc;
};
imageViewer = mkOption {
type = types.package;
default = pkgs.gnome-photos;
};
}; };
}; };
description = "Default applications used across the system."; description = "Default applications used across the system.";

View File

@@ -234,10 +234,10 @@ in
calendar = { calendar = {
mode = "month"; mode = "month";
format = { format = {
months = "<span color='${nord.frost.nord9}'><b>{}</b></span>"; months = "<span color='${nord.frost.nord9}'><b>{}</b></span>";
days = "<span color='${nord.frost.nord10}'><b>{}</b></span>"; days = "<span color='${nord.frost.nord10}'><b>{}</b></span>";
weekdays = "<span color='${nord.frost.nord8}'><b>{}</b></span>"; weekdays = "<span color='${nord.frost.nord8}'><b>{}</b></span>";
today = "<span color='${nord.aurora.nord14}'><b><u>{}</u></b></span>"; today = "<span color='${nord.aurora.nord14}'><b><u>{}</u></b></span>";
}; };
}; };
}; };
@@ -247,8 +247,8 @@ in
interval = 60; interval = 60;
# statuses: 'Charging', 'Discharging' # statuses: 'Charging', 'Discharging'
states = { states = {
warning = 30; warning = 30;
critical = 15; critical = 15;
}; };
format = "{capacity}% {icon}"; format = "{capacity}% {icon}";
format-icons = { format-icons = {
@@ -296,239 +296,241 @@ in
# * { font-size: 13px; } # * { font-size: 13px; }
# window.eDP-1 * { font-size: 10px; } # window.eDP-1 * { font-size: 10px; }
style = '' style =
.blink_me { ''
animation: blinker 1s linear infinite; .blink_me {
} animation: blinker 1s linear infinite;
@keyframes blinker {
50% {
color: ${nord.aurora.nord11};
} }
}
* { @keyframes blinker {
font-family: 50% {
Jetbrains Mono Nerd Font, color: ${nord.aurora.nord11};
monospace; }
font-size: 14px; }
min-height: 0;
}
#waybar { * {
background: transparent; font-family:
color: ${nord.snowStorm.nord6}; Jetbrains Mono Nerd Font,
margin: 5px 5px; monospace;
} font-size: 14px;
min-height: 0;
}
#workspaces { #waybar {
background-color: ${nord.polarNight.nord0}; background: transparent;
${defaultBorderRadius} color: ${nord.snowStorm.nord6};
${defaultOpacity} margin: 5px 5px;
${defaultCenterOptions} }
margin-left: 0.6rem;
}
#workspaces button { #workspaces {
color: ${nord.frost.nord10}; background-color: ${nord.polarNight.nord0};
${defaultBorderRadius} ${defaultBorderRadius}
padding: 0.4rem; ${defaultOpacity}
} ${defaultCenterOptions}
margin-left: 0.6rem;
}
#workspaces button.active { #workspaces button {
color: ${nord.frost.nord8}; color: ${nord.frost.nord10};
${defaultBorderRadius} ${defaultBorderRadius}
} padding: 0.4rem;
}
#workspaces button:hover { #workspaces button.active {
color: ${nord.frost.nord7}; color: ${nord.frost.nord8};
${defaultBorderRadius} ${defaultBorderRadius}
} }
#workspaces button.focused { #workspaces button:hover {
color: ${nord.snowStorm.nord6}; color: ${nord.frost.nord7};
background: ${nord.aurora.nord13}; ${defaultBorderRadius}
${defaultBorderRadius} }
}
#workspaces button.urgent { #workspaces button.focused {
color: ${nord.polarNight.nord0}; color: ${nord.snowStorm.nord6};
background: ${nord.snowStorm.nord6}; background: ${nord.aurora.nord13};
${defaultBorderRadius} ${defaultBorderRadius}
} }
#tooltip { #workspaces button.urgent {
background: ${nord.polarNight.nord0}; color: ${nord.polarNight.nord0};
border-color: ${nord.polarNight.nord0}; background: ${nord.snowStorm.nord6};
${defaultBorderRadius} ${defaultBorderRadius}
border-width: 1rem; }
border-style: solid;
}
#window { #tooltip {
color: ${nord.aurora.nord15}; background: ${nord.polarNight.nord0};
background-color: ${nord.polarNight.nord0}; border-color: ${nord.polarNight.nord0};
${defaultOpacity} ${defaultBorderRadius}
${defaultBorderRadius} border-width: 1rem;
${defaultCenterOptions} border-style: solid;
margin-left: 4rem; }
margin-right: 400rem;
}
/* make window module transparent when no windows present */ #window {
#window.empty { color: ${nord.aurora.nord15};
background-color: transparent; background-color: ${nord.polarNight.nord0};
} ${defaultOpacity}
${defaultBorderRadius}
${defaultCenterOptions}
margin-left: 4rem;
margin-right: 400rem;
}
#custom-weather { /* make window module transparent when no windows present */
color: ${nord.frost.nord10}; #window.empty {
background-color: ${nord.polarNight.nord0}; background-color: transparent;
${defaultOpacity} }
${borderRight}
}
#battery { #custom-weather {
color: ${nord.aurora.nord15}; color: ${nord.frost.nord10};
background-color: ${nord.polarNight.nord0}; background-color: ${nord.polarNight.nord0};
${defaultOpacity} ${defaultOpacity}
${defaultCenterOptions} ${borderRight}
border-radius: 0; }
min-width: 3rem;
}
#clock { #battery {
color: ${nord.frost.nord9}; color: ${nord.aurora.nord15};
background-color: ${nord.polarNight.nord0}; background-color: ${nord.polarNight.nord0};
${defaultOpacity} ${defaultOpacity}
${borderLeft} ${defaultCenterOptions}
} border-radius: 0;
min-width: 3rem;
}
/* ------------- */ #clock {
color: ${nord.frost.nord9};
background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${borderLeft}
}
#idle_inhibitor { /* ------------- */
color: ${nord.frost.nord10};
background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${borderRight}
padding-right: 1rem;
}
#idle_inhibitor:hover { #idle_inhibitor {
background: ${nord.polarNight.nord3}; color: ${nord.frost.nord10};
} background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${borderRight}
padding-right: 1rem;
}
#network { #idle_inhibitor:hover {
color: ${nord.aurora.nord15}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
padding-right: 15px;
}
#network:hover { #network {
background: ${nord.polarNight.nord3}; color: ${nord.aurora.nord15};
} background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
padding-right: 15px;
}
#bluetooth { #network:hover {
color: ${nord.frost.nord9}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#bluetooth:hover { #bluetooth {
background: ${nord.polarNight.nord3}; color: ${nord.frost.nord9};
} background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#wireplumber.source { #bluetooth:hover {
color: ${nord.frost.nord8}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#wireplumber.source.muted { #wireplumber.source {
animation-name: blinker; color: ${nord.frost.nord8};
animation-duration: 2s; background-color: ${nord.polarNight.nord0};
animation-timing-function: linear; ${defaultOpacity}
animation-iteration-count: infinite; ${defaultCenterOptions}
padding-right: 1rem; border-radius: 0;
} }
#wireplumber.source:hover { #wireplumber.source.muted {
background: ${nord.polarNight.nord3}; animation-name: blinker;
} animation-duration: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
padding-right: 1rem;
}
#wireplumber.sink { #wireplumber.source:hover {
color: ${nord.frost.nord7}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#wireplumber.sink.muted { #wireplumber.sink {
animation-name: blinker; color: ${nord.frost.nord7};
animation-duration: 5s; background-color: ${nord.polarNight.nord0};
animation-timing-function: linear; ${defaultOpacity}
animation-iteration-count: infinite; ${defaultCenterOptions}
} border-radius: 0;
}
#wireplumber.sink:hover { #wireplumber.sink.muted {
background: ${nord.polarNight.nord3}; animation-name: blinker;
} animation-duration: 5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
#keyboard-state.numlock { #wireplumber.sink:hover {
color: ${nord.frost.nord8}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#keyboard-state.capslock { #keyboard-state.numlock {
color: ${nord.frost.nord9}; color: ${nord.frost.nord8};
background-color: ${nord.polarNight.nord0}; background-color: ${nord.polarNight.nord0};
${defaultOpacity} ${defaultOpacity}
${defaultCenterOptions} ${defaultCenterOptions}
border-radius: 0; border-radius: 0;
} }
#temperature.gpu { #keyboard-state.capslock {
color: ${nord.frost.nord10}; color: ${nord.frost.nord9};
background-color: ${nord.polarNight.nord0}; background-color: ${nord.polarNight.nord0};
${defaultOpacity} ${defaultOpacity}
${defaultCenterOptions} ${defaultCenterOptions}
border-radius: 0; border-radius: 0;
} }
#temperature.gpu:hover { #temperature.gpu {
background: ${nord.polarNight.nord3}; color: ${nord.frost.nord10};
} background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0;
}
#temperature { #temperature.gpu:hover {
color: ${nord.frost.nord9}; background: ${nord.polarNight.nord3};
background-color: ${nord.polarNight.nord0}; }
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0
}
/* ------------- */ #temperature {
color: ${nord.frost.nord9};
background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
border-radius: 0
}
#tray { /* ------------- */
background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
${defaultBorderRadius}
margin-right: 0.6rem;
}
/* ------------- */ #tray {
'' + cfg.extraModulesStyle or ''''; background-color: ${nord.polarNight.nord0};
${defaultOpacity}
${defaultCenterOptions}
${defaultBorderRadius}
margin-right: 0.6rem;
}
/* ------------- */
''
+ cfg.extraModulesStyle or '''';
}; };
}; };
} }

View File

@@ -42,7 +42,7 @@ in
modules-right = mkOption { modules-right = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = []; default = [ ];
}; };
networkInterface = mkOption { networkInterface = mkOption {

View File

@@ -1,4 +1,10 @@
{ config, lib, namespace, pkgs, ... }: {
config,
lib,
namespace,
pkgs,
...
}:
let let
cfg = config.mjallen.programs.waybar; cfg = config.mjallen.programs.waybar;

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.mjallen.programs.waybar; cfg = config.mjallen.programs.waybar;

View File

@@ -5,7 +5,7 @@ let
nord = import ../../desktop/theme/nord.nix; nord = import ../../desktop/theme/nord.nix;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.wlogout = { programs.wlogout = {
enable = false; enable = false;

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
let let
cfg = config.mjallen.sops; cfg = config.mjallen.sops;

View File

@@ -1,4 +1,9 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
with lib; with lib;
let let
cfg = config.nas-apps.actual; cfg = config.nas-apps.actual;
@@ -24,7 +29,8 @@ in
}; };
}; };
config = { lib, ... }: config =
{ lib, ... }:
{ {
services.actual = { services.actual = {
enable = true; enable = true;
@@ -69,7 +75,7 @@ in
ExecStart = lib.mkForce "${pkgs.actual-server}/bin/actual-server --config ${dataDir}/config.json"; ExecStart = lib.mkForce "${pkgs.actual-server}/bin/actual-server --config ${dataDir}/config.json";
WorkingDirectory = lib.mkForce dataDir; WorkingDirectory = lib.mkForce dataDir;
StateDirectory = lib.mkForce dataDir; StateDirectory = lib.mkForce dataDir;
StateDirectoryMode = lib.mkForce 0700; StateDirectoryMode = lib.mkForce 700;
DynamicUser = lib.mkForce false; DynamicUser = lib.mkForce false;
ProtectSystem = lib.mkForce null; ProtectSystem = lib.mkForce null;
}; };

View File

@@ -6,7 +6,7 @@
}: }:
let let
cfg = config.share.hardware.amd; cfg = config.share.hardware.amd;
pkgsVersion = pkgs;#.unstable; pkgsVersion = pkgs; # .unstable;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];

View File

@@ -40,9 +40,11 @@ in
{ {
nixpkgs.config = { nixpkgs.config = {
allowUnfree = lib.mkForce true; allowUnfree = lib.mkForce true;
allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ allowUnfreePredicate =
"unrar" pkg:
]; builtins.elem (lib.getName pkg) [
"unrar"
];
}; };
# Enable radarr service # Enable radarr service
@@ -207,7 +209,7 @@ in
}; };
networking = { networking = {
nat = { nat = {
forwardPorts = [ forwardPorts = [
{ {
destination = "${cfg.localAddress}:${toString cfg.radarr.port}"; destination = "${cfg.localAddress}:${toString cfg.radarr.port}";
@@ -232,8 +234,22 @@ in
]; ];
}; };
firewall = { firewall = {
allowedTCPPorts = [ cfg.radarr.port cfg.sonarr.port cfg.sabnzbd.port 8080 cfg.deluge.port cfg.jackett.port ]; allowedTCPPorts = [
allowedUDPPorts = [ cfg.radarr.port cfg.sonarr.port cfg.sabnzbd.port 8080 cfg.deluge.port cfg.jackett.port ]; cfg.radarr.port
cfg.sonarr.port
cfg.sabnzbd.port
8080
cfg.deluge.port
cfg.jackett.port
];
allowedUDPPorts = [
cfg.radarr.port
cfg.sonarr.port
cfg.sabnzbd.port
8080
cfg.deluge.port
cfg.jackett.port
];
}; };
}; };
}; };

View File

@@ -1,4 +1,9 @@
{ pkgs, system, lib, ... }: {
pkgs,
system,
lib,
...
}:
let let
isArm = ("aarch64-linux" == system); isArm = ("aarch64-linux" == system);
in in

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.bootloader.lanzaboote; cfg = config.${namespace}.bootloader.lanzaboote;

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.nas-apps.crowdsec; cfg = config.nas-apps.crowdsec;
@@ -7,23 +12,25 @@ in
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
services = { services = {
crowdsec = let crowdsec =
yaml = (pkgs.formats.yaml {}).generate; let
acquisitions_file = yaml "acquisitions.yaml" { yaml = (pkgs.formats.yaml { }).generate;
source = "journalctl"; acquisitions_file = yaml "acquisitions.yaml" {
journalctl_filter = ["_SYSTEMD_UNIT=sshd.service"]; source = "journalctl";
labels.type = "syslog"; journalctl_filter = [ "_SYSTEMD_UNIT=sshd.service" ];
}; labels.type = "syslog";
in { };
enable = true; in
enrollKeyFile = "${cfg.dataDir}/enroll.key"; {
settings = { enable = true;
crowdsec_service.acquisition_path = acquisitions_file; enrollKeyFile = "${cfg.dataDir}/enroll.key";
api.server = { settings = {
listen_uri = "0.0.0.0:${toString cfg.port}"; crowdsec_service.acquisition_path = acquisitions_file;
api.server = {
listen_uri = "0.0.0.0:${toString cfg.port}";
};
}; };
}; };
};
crowdsec-firewall-bouncer = { crowdsec-firewall-bouncer = {
enable = true; enable = true;
@@ -35,17 +42,19 @@ in
}; };
systemd.services.crowdsec.serviceConfig = { systemd.services.crowdsec.serviceConfig = {
ExecStartPre = let ExecStartPre =
script = pkgs.writeScriptBin "register-bouncer" '' let
#!${pkgs.runtimeShell} script = pkgs.writeScriptBin "register-bouncer" ''
set -eu #!${pkgs.runtimeShell}
set -o pipefail set -eu
set -o pipefail
if ! cscli bouncers list | grep -q "nas-bouncer"; then if ! cscli bouncers list | grep -q "nas-bouncer"; then
cscli bouncers add "nas-bouncer" --key "${cfg.apiKey}" cscli bouncers add "nas-bouncer" --key "${cfg.apiKey}"
fi fi
''; '';
in ["${script}/bin/register-bouncer"]; in
[ "${script}/bin/register-bouncer" ];
}; };
networking = { networking = {

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.cosmic; cfg = config.${namespace}.desktop.cosmic;
in in

View File

@@ -1,4 +1,10 @@
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.gnome; cfg = config.${namespace}.desktop.gnome;
in in

View File

@@ -1,4 +1,10 @@
{ config, pkgs, lib, namespace, ... }: {
config,
pkgs,
lib,
namespace,
...
}:
let let
cfg = config.${namespace}.desktop.hyprland; cfg = config.${namespace}.desktop.hyprland;
@@ -26,7 +32,10 @@ in
imports = [ ../../../home/desktop/hyprland/options.nix ]; imports = [ ../../../home/desktop/hyprland/options.nix ];
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ bing-wallpaper pkgs.jq ]; environment.systemPackages = [
bing-wallpaper
pkgs.jq
];
services = { services = {
displayManager = { displayManager = {
@@ -124,15 +133,15 @@ in
# Timer configuration # Timer configuration
timerConfig = { timerConfig = {
OnCalendar = "daily"; # Check every day OnCalendar = "daily"; # Check every day
Persistent = true; # Run immediately if last run was missed Persistent = true; # Run immediately if last run was missed
Unit = "reload-bing-wallpaper.service"; Unit = "reload-bing-wallpaper.service";
}; };
}; };
}; };
}; };
extraConfig = '' extraConfig = ''
DefaultTimeoutStopSec=10s DefaultTimeoutStopSec=10s
''; '';
}; };

View File

@@ -1,10 +1,10 @@
{ pkgs, ... }: { pkgs, ... }:
let let
nord = import ./theme.nix; nord = import ./theme.nix;
themeSize = "compact"; # [ "standard" "compact" ] themeSize = "compact"; # [ "standard" "compact" ]
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ] themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ] themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
themeColor = "dark"; # [ "standard" "light" "dark" ] themeColor = "dark"; # [ "standard" "light" "dark" ]
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ] iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ] iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]

View File

@@ -1,4 +1,9 @@
{ config, lib, system, ... }: {
config,
lib,
system,
...
}:
let let
isArm = builtins.match "aarch64*" system != null; isArm = builtins.match "aarch64*" system != null;
rootDisk = "/dev/nvme0n1"; rootDisk = "/dev/nvme0n1";

View File

@@ -1,4 +1,10 @@
{ config, lib, system, namespace, ... }: {
config,
lib,
system,
namespace,
...
}:
let let
cfg = config.${namespace}.hardware.disko; cfg = config.${namespace}.hardware.disko;
isArm = builtins.match "aarch64*" system != null; isArm = builtins.match "aarch64*" system != null;

View File

@@ -1,11 +1,14 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
{ {
fonts.packages = with pkgs; [ fonts.packages =
font-awesome with pkgs;
noto-fonts [
noto-fonts-color-emoji font-awesome
meslo-lgs-nf noto-fonts
] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); noto-fonts-color-emoji
meslo-lgs-nf
]
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
fonts.fontconfig.defaultFonts = { fonts.fontconfig.defaultFonts = {
emoji = [ emoji = [

View File

@@ -1,7 +1,12 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
let let
cfg = config.share.gaming; cfg = config.share.gaming;
pkgsVersion = pkgs; #.unstable; pkgsVersion = pkgs; # .unstable;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
@@ -17,7 +22,7 @@ in
remotePlay.openFirewall = true; remotePlay.openFirewall = true;
# Open ports in the firewall for Source Dedicated Server # Open ports in the firewall for Source Dedicated Server
dedicatedServer.openFirewall = true; dedicatedServer.openFirewall = true;
extraCompatPackages = with pkgsVersion; [ proton-ge-bin]; extraCompatPackages = with pkgsVersion; [ proton-ge-bin ];
gamescopeSession = { gamescopeSession = {
enable = true; enable = true;
args = [ args = [

View File

@@ -34,7 +34,8 @@ in
}; };
}; };
config = { lib, ... }: config =
{ lib, ... }:
{ {
services.gitea = { services.gitea = {
enable = true; enable = true;
@@ -71,7 +72,10 @@ in
networking = { networking = {
firewall = { firewall = {
enable = true; enable = true;
allowedTCPPorts = [ cfg.httpPort cfg.sshPort ]; allowedTCPPorts = [
cfg.httpPort
cfg.sshPort
];
}; };
# Use systemd-resolved inside the container # Use systemd-resolved inside the container
# Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686 # Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686
@@ -122,8 +126,14 @@ in
]; ];
}; };
firewall = { firewall = {
allowedTCPPorts = [ cfg.httpPort cfg.sshPort ]; allowedTCPPorts = [
allowedUDPPorts = [ cfg.httpPort cfg.sshPort ]; cfg.httpPort
cfg.sshPort
];
allowedUDPPorts = [
cfg.httpPort
cfg.sshPort
];
}; };
}; };
}; };

View File

@@ -1,6 +1,6 @@
{ lib, system, ... }: { lib, system, ... }:
let let
isArm = "aarch64-linux" == system; isArm = "aarch64-linux" == system;
in in
{ {
hardware = { hardware = {

View File

@@ -45,18 +45,23 @@ in
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
# Pass inputs so external modules can access them # Pass inputs so external modules can access them
extraSpecialArgs = { extraSpecialArgs = {
inherit inputs; inherit inputs;
}; };
# Make ALL external HM modules available globally # Make ALL external HM modules available globally
sharedModules = with inputs; [ sharedModules =
sops-nix.homeManagerModules.sops with inputs;
# Add any other external HM modules here [
] ++ (if (!isArm) then with inputs; [ steam-rom-manager.homeManagerModules.default ] else [ ]); sops-nix.homeManagerModules.sops
# Add any other external HM modules here
]
++ (if (!isArm) then with inputs; [ steam-rom-manager.homeManagerModules.default ] else [ ]);
users.${config.${namespace}.user.name} = lib.mkAliasDefinitions options.${namespace}.home.extraOptions; users.${config.${namespace}.user.name} =
lib.mkAliasDefinitions
options.${namespace}.home.extraOptions;
# users.admin = lib.mkAliasDefinitions options.${namespace}.home.extraOptions; # users.admin = lib.mkAliasDefinitions options.${namespace}.home.extraOptions;
verbose = true; verbose = true;

View File

@@ -1,4 +1,10 @@
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
let let
cfg = config.${namespace}.services.home-assistant; cfg = config.${namespace}.services.home-assistant;
mosquittoPort = 1883; mosquittoPort = 1883;
@@ -106,110 +112,111 @@ in
zigbee2mqtt-networkmap zigbee2mqtt-networkmap
]; ];
# use postgresql instead of sqlite # use postgresql instead of sqlite
extraPackages = ps: with ps; [ extraPackages =
# Core functionality ps: with ps; [
aiohttp # Core functionality
aiodns aiohttp
paho-mqtt aiodns
pillow paho-mqtt
pytz pillow
pyyaml pytz
sqlalchemy pyyaml
sqlalchemy
# Discovery & networking # Discovery & networking
zeroconf zeroconf
netdisco netdisco
ifaddr ifaddr
ssdp ssdp
# Device protocols # Device protocols
pyserial # Serial communications pyserial # Serial communications
bluepy # Bluetooth LE bluepy # Bluetooth LE
# Smart home ecosystems # Smart home ecosystems
mutagen # Media file metadata mutagen # Media file metadata
pysonos # Sonos pysonos # Sonos
pywemo # Belkin WeMo pywemo # Belkin WeMo
python-miio # Xiaomi devices python-miio # Xiaomi devices
python-kasa # TP-Link python-kasa # TP-Link
# Sensors & monitoring # Sensors & monitoring
meteocalc # Weather calculations meteocalc # Weather calculations
speedtest-cli # Internet speed speedtest-cli # Internet speed
# Visualization & UI # Visualization & UI
matplotlib # Graphing matplotlib # Graphing
# Security # Security
bcrypt bcrypt
cryptography cryptography
pyjwt pyjwt
# Media # Media
ha-ffmpeg # Camera streams ha-ffmpeg # Camera streams
# Specialized integrations # Specialized integrations
python-matter-server # Matter protocol python-matter-server # Matter protocol
# System integrations # System integrations
psutil # System monitoring psutil # System monitoring
psycopg2 psycopg2
numpy numpy
hassil hassil
pyturbojpeg pyturbojpeg
paho-mqtt paho-mqtt
pychromecast pychromecast
pyatv pyatv
python-otbr-api python-otbr-api
brother brother
pyipp pyipp
govee-ble govee-ble
adguardhome adguardhome
nextcord nextcord
aiogithubapi aiogithubapi
jellyfin-apiclient-python jellyfin-apiclient-python
pylitterbot pylitterbot
dateparser dateparser
aionut aionut
nextcloudmonitor nextcloudmonitor
ollama ollama
pynecil pynecil
aiopyarr aiopyarr
pysabnzbd pysabnzbd
getmac getmac
zigpy zigpy
bellows # For Zigbee EmberZNet-based adapters bellows # For Zigbee EmberZNet-based adapters
zigpy-xbee # For XBee adapters zigpy-xbee # For XBee adapters
zigpy-deconz # For ConBee/RaspBee adapters zigpy-deconz # For ConBee/RaspBee adapters
pyicloud # iCloud pyicloud # iCloud
pyatv # Apple TV pyatv # Apple TV
opencv-python opencv-python
face-recognition face-recognition
ibeacon-ble ibeacon-ble
gehomesdk gehomesdk
onedrive-personal-sdk onedrive-personal-sdk
python-roborock python-roborock
python-steam python-steam
apple-weatherkit apple-weatherkit
samsungctl samsungctl
samsungtvws samsungtvws
aiohomekit aiohomekit
icmplib icmplib
aioelectricitymaps aioelectricitymaps
wyoming wyoming
pysmartthings pysmartthings
wakeonlan wakeonlan
ephem ephem
]; ];
config = { config = {
# Includes dependencies for a basic setup # Includes dependencies for a basic setup
# https://www.home-assistant.io/integrations/default_config/ # https://www.home-assistant.io/integrations/default_config/
default_config = {}; default_config = { };
cloud = false; cloud = false;
@@ -262,10 +269,12 @@ in
postgresql = { postgresql = {
enable = true; enable = true;
ensureDatabases = [ "hass" ]; ensureDatabases = [ "hass" ];
ensureUsers = [{ ensureUsers = [
name = "hass"; {
ensureDBOwnership = true; name = "hass";
}]; ensureDBOwnership = true;
}
];
}; };
# Enable and configure Mosquitto MQTT broker # Enable and configure Mosquitto MQTT broker
@@ -303,7 +312,7 @@ in
permit_join = true; permit_join = true;
# Web interface # Web interface
frontend = { frontend = {
port = zigbee2mqttPort; # Choose an available port port = zigbee2mqttPort; # Choose an available port
}; };
# MQTT configuration # MQTT configuration
mqtt = { mqtt = {
@@ -380,7 +389,7 @@ in
}; };
# Enable required hardware support for the Zigbee adapter # Enable required hardware support for the Zigbee adapter
hardware.bluetooth.enable = true; # Some adapters use Bluetooth hardware.bluetooth.enable = true; # Some adapters use Bluetooth
# Ensure proper permissions for Zigbee USB devices # Ensure proper permissions for Zigbee USB devices
# services.udev.extraRules = '' # services.udev.extraRules = ''
@@ -396,8 +405,8 @@ in
# ''; # '';
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
mosquitto # MQTT command-line tools mosquitto # MQTT command-line tools
usbutils # For lsusb to help identify your adapter usbutils # For lsusb to help identify your adapter
]; ];
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.immich; cfg = config.${namespace}.services.immich;
@@ -8,7 +13,7 @@ let
dbPassword = config.sops.secrets."jallen-nas/immich/db-password".path; dbPassword = config.sops.secrets."jallen-nas/immich/db-password".path;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
# Enable immich service # Enable immich service

View File

@@ -1,10 +1,15 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.jellyfin; cfg = config.${namespace}.services.jellyfin;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.jellyfin = { services.jellyfin = {

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.jellyseerr; cfg = config.${namespace}.services.jellyseerr;
@@ -7,7 +12,7 @@ let
dataDir = "/var/lib/private/jellyseerr"; dataDir = "/var/lib/private/jellyseerr";
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
containers.jellyseerr = { containers.jellyseerr = {

View File

@@ -1,10 +1,15 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.lubelogger; cfg = config.${namespace}.services.lubelogger;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
virtualisation.oci-containers.containers.lubelogger = { virtualisation.oci-containers.containers.lubelogger = {

View File

@@ -56,8 +56,8 @@ in
id = "Joey's Jungle 6G"; id = "Joey's Jungle 6G";
type = "wifi"; type = "wifi";
}; };
ipv4 = if (cfg.ipv4.method == "auto") ipv4 =
then if (cfg.ipv4.method == "auto") then
{ {
method = "auto"; method = "auto";
} }
@@ -87,8 +87,8 @@ in
id = "Joey's Jungle 5G"; id = "Joey's Jungle 5G";
type = "wifi"; type = "wifi";
}; };
ipv4 = if (cfg.ipv4.method == "auto") ipv4 =
then if (cfg.ipv4.method == "auto") then
{ {
method = "auto"; method = "auto";
} }

View File

@@ -1,11 +1,17 @@
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.nextcloud; cfg = config.${namespace}.services.nextcloud;
adminpass = config.sops.secrets."jallen-nas/nextcloud/adminpassword".path; adminpass = config.sops.secrets."jallen-nas/nextcloud/adminpassword".path;
secretsFile = config.sops.secrets."jallen-nas/nextcloud/smtp_settings".path; secretsFile = config.sops.secrets."jallen-nas/nextcloud/smtp_settings".path;
jwtSecretFile = config.sops.secrets."jallen-nas/onlyoffice-key".path; jwtSecretFile = config.sops.secrets."jallen-nas/onlyoffice-key".path;
nextcloudUserId = config.users.users.nix-apps.uid; nextcloudUserId = config.users.users.nix-apps.uid;
nextcloudGroupId = config.users.groups.jallen-nas.gid; nextcloudGroupId = config.users.groups.jallen-nas.gid;
hostAddress = "10.0.1.3"; hostAddress = "10.0.1.3";
@@ -15,7 +21,7 @@ let
onlyofficePortExt = 9943; onlyofficePortExt = 9943;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
containers.nextcloud = { containers.nextcloud = {
@@ -60,12 +66,17 @@ in
}; };
config = config =
{ pkgs, lib, namespace, ... }: {
pkgs,
lib,
namespace,
...
}:
{ {
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
networking.extraHosts = '' networking.extraHosts = ''
${hostAddress} host.containers protonmail-bridge ${hostAddress} host.containers protonmail-bridge
''; '';
services = { services = {
nextcloud = { nextcloud = {

View File

@@ -15,11 +15,11 @@ in
hardware = { hardware = {
# Nvidia # Nvidia
nvidia = { nvidia = {
package = package =
if cfg.enableBeta then if cfg.enableBeta then
config.boot.kernelPackages.nvidiaPackages.beta config.boot.kernelPackages.nvidiaPackages.beta
else else
config.boot.kernelPackages.nvidiaPackages.latest; config.boot.kernelPackages.nvidiaPackages.latest;
# Modesetting is required. # Modesetting is required.
modesetting.enable = true; modesetting.enable = true;

View File

@@ -1,13 +1,19 @@
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.ollama; cfg = config.${namespace}.services.ollama;
llamaPackage = pkgs.llama-cpp.overrideAttrs (old: { llamaPackage = pkgs.llama-cpp.overrideAttrs (old: {
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
owner = "ggml-org"; owner = "ggml-org";
repo = "llama.cpp"; repo = "llama.cpp";
rev = "b4920"; rev = "b4920";
sha256 = "sha256-SnQIeY74JpAPRMxWcpklDH5D4CQvAgi0GYx5+ECk2J4="; sha256 = "sha256-SnQIeY74JpAPRMxWcpklDH5D4CQvAgi0GYx5+ECk2J4=";
}; };
# Optionally override other attributes if you need to # Optionally override other attributes if you need to
@@ -16,7 +22,7 @@ let
}); });
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.ollama = { services.ollama = {

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.paperless; cfg = config.${namespace}.services.paperless;
@@ -10,7 +15,7 @@ let
paperlessPkg = pkgs.paperless-ngx; paperlessPkg = pkgs.paperless-ngx;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
containers.paperless = { containers.paperless = {

View File

@@ -30,7 +30,7 @@
# Enable Avahi for .local hostname resolution # Enable Avahi for .local hostname resolution
avahi = { avahi = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
nssmdns4 = lib.mkDefault true; # For modern systems, use nssmdns4 instead of nssmdns nssmdns4 = lib.mkDefault true; # For modern systems, use nssmdns4 instead of nssmdns
openFirewall = lib.mkDefault true; openFirewall = lib.mkDefault true;
publish = { publish = {
enable = lib.mkDefault true; enable = lib.mkDefault true;

View File

@@ -1,4 +1,9 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.traefik; cfg = config.${namespace}.services.traefik;
@@ -45,10 +50,10 @@ let
metricsPort = 8082; metricsPort = 8082;
forwardPorts = [ forwardPorts = [
httpPort httpPort
httpsPort httpsPort
traefikPort traefikPort
metricsPort metricsPort
]; ];
# misc # misc
@@ -57,7 +62,7 @@ let
authentikAddress = "http://${serverIp}:9000/outpost.goauthentik.io/auth/traefik"; authentikAddress = "http://${serverIp}:9000/outpost.goauthentik.io/auth/traefik";
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
sops = { sops = {
@@ -76,7 +81,9 @@ in
"traefik.env" = { "traefik.env" = {
content = '' content = ''
CLOUDFLARE_DNS_API_TOKEN = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-dns-api-token"} CLOUDFLARE_DNS_API_TOKEN = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-dns-api-token"}
CLOUDFLARE_ZONE_API_TOKEN = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-zone-api-token"} CLOUDFLARE_ZONE_API_TOKEN = ${
config.sops.placeholder."jallen-nas/traefik/cloudflare-zone-api-token"
}
CLOUDFLARE_API_KEY = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-api-key"} CLOUDFLARE_API_KEY = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-api-key"}
CLOUDFLARE_EMAIL = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-email"} CLOUDFLARE_EMAIL = ${config.sops.placeholder."jallen-nas/traefik/cloudflare-email"}
''; '';
@@ -95,7 +102,7 @@ in
services.traefik = { services.traefik = {
enable = true; enable = true;
dataDir = dataDir; dataDir = dataDir;
group = "jallen-nas";#group; group = "jallen-nas"; # group;
environmentFiles = [ "${config.services.traefik.dataDir}/traefik.env" ]; # todo: sops environmentFiles = [ "${config.services.traefik.dataDir}/traefik.env" ]; # todo: sops
staticConfigOptions = { staticConfigOptions = {
@@ -129,7 +136,12 @@ in
entryPoint = "metrics"; entryPoint = "metrics";
addEntryPointsLabels = true; addEntryPointsLabels = true;
addServicesLabels = true; addServicesLabels = true;
buckets = [0.1 0.3 1.2 5.0]; # Response time buckets buckets = [
0.1
0.3
1.2
5.0
]; # Response time buckets
}; };
}; };
@@ -215,8 +227,7 @@ in
}; };
}; };
}; };
internal-ipallowlist = internal-ipallowlist = {
{
ipAllowList = { ipAllowList = {
sourceRange = [ sourceRange = [
"127.0.0.1/32" "127.0.0.1/32"
@@ -305,7 +316,10 @@ in
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "HostRegexp(`{subdomain:[a-z]+}.mjallen.dev`) && PathPrefix(`/outpost.goauthentik.io/`)"; rule = "HostRegexp(`{subdomain:[a-z]+}.mjallen.dev`) && PathPrefix(`/outpost.goauthentik.io/`)";
service = "auth"; service = "auth";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
priority = 15; priority = 15;
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
@@ -314,21 +328,30 @@ in
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`actual.${domain}`)"; rule = "Host(`actual.${domain}`)";
service = "actual"; service = "actual";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
authentik = { authentik = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`authentik.${domain}`)"; rule = "Host(`authentik.${domain}`)";
service = "authentik"; service = "authentik";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
cache = { cache = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`cache.${domain}`)"; rule = "Host(`cache.${domain}`)";
service = "cache"; service = "cache";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
priority = 10; priority = 10;
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
@@ -336,21 +359,31 @@ in
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`cloud.${domain}`)"; rule = "Host(`cloud.${domain}`)";
service = "cloud"; service = "cloud";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
gitea = { gitea = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`gitea.${domain}`)"; rule = "Host(`gitea.${domain}`)";
service = "gitea"; service = "gitea";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
hass = { hass = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`hass.${domain}`)"; rule = "Host(`hass.${domain}`)";
service = "hass"; service = "hass";
middlewares = [ "crowdsec" "whitelist-geoblock" "authentik" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
"authentik"
];
priority = 10; priority = 10;
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
@@ -358,35 +391,51 @@ in
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`immich.${domain}`)"; rule = "Host(`immich.${domain}`)";
service = "immich"; service = "immich";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
jellyfin = { jellyfin = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`jellyfin.${domain}`)"; rule = "Host(`jellyfin.${domain}`)";
service = "jellyfin"; service = "jellyfin";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
jellyseerr = { jellyseerr = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`jellyseerr.${domain}`)"; rule = "Host(`jellyseerr.${domain}`)";
service = "jellyseerr"; service = "jellyseerr";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
lubelogger = { lubelogger = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`lubelogger.${domain}`)"; rule = "Host(`lubelogger.${domain}`)";
service = "lubelogger"; service = "lubelogger";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
onlyoffice = { onlyoffice = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`office.${domain}`)"; rule = "Host(`office.${domain}`)";
service = "onlyoffice"; service = "onlyoffice";
middlewares = [ "crowdsec" "whitelist-geoblock" "onlyoffice-websocket" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
"onlyoffice-websocket"
];
tls.certResolver = "letsencrypt"; tls.certResolver = "letsencrypt";
}; };
}; };

View File

@@ -1,10 +1,15 @@
{ config, lib, namespace, ... }: {
config,
lib,
namespace,
...
}:
with lib; with lib;
let let
cfg = config.${namespace}.services.wyoming; cfg = config.${namespace}.services.wyoming;
in in
{ {
imports = [ ./options.nix ]; imports = [ ./options.nix ];
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.wyoming = { services.wyoming = {

View File

@@ -1,6 +1,6 @@
{ ... }: { ... }:
final: prev: { final: prev: {
waybar = prev.waybar.overrideAttrs (old: { waybar = prev.waybar.overrideAttrs (old: {
mesonFlags = (old.mesonFlags or []) ++ [ "-Dexperimental=true" ]; mesonFlags = (old.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ];
}); });
} }

View File

@@ -1,4 +1,9 @@
{ buildHomeAssistantComponent, pkgs, namespace, ... }: {
buildHomeAssistantComponent,
pkgs,
namespace,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "adamoutler"; owner = "adamoutler";
domain = "anycubic_wifi"; domain = "anycubic_wifi";

View File

@@ -1,4 +1,9 @@
{ buildHomeAssistantComponent, python3Packages, fetchFromGitHub, ... }: {
buildHomeAssistantComponent,
python3Packages,
fetchFromGitHub,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "greghesp"; owner = "greghesp";
domain = "bambu_lab"; domain = "bambu_lab";

View File

@@ -1,4 +1,10 @@
{ buildHomeAssistantComponent, fetchFromGitHub, python3Packages, namespace, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
python3Packages,
namespace,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "simbaja"; owner = "simbaja";
domain = "ge_home"; domain = "ge_home";

View File

@@ -1,4 +1,9 @@
{ buildHomeAssistantComponent, fetchFromGitHub, python3Packages, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
python3Packages,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "gcobb321"; owner = "gcobb321";
domain = "icloud3"; domain = "icloud3";

View File

@@ -1,4 +1,9 @@
{ buildHomeAssistantComponent, fetchFromGitHub, python3Packages, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
python3Packages,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "moralmunky"; owner = "moralmunky";
domain = "mail_and_packages"; domain = "mail_and_packages";

View File

@@ -1,4 +1,10 @@
{ buildHomeAssistantComponent, fetchFromGitHub, pkgs, namespace, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
pkgs,
namespace,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "Wouter0100"; owner = "Wouter0100";
domain = "nanokvm"; domain = "nanokvm";

View File

@@ -1,4 +1,10 @@
{ buildHomeAssistantComponent, fetchFromGitHub, pkgs, namespace, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
pkgs,
namespace,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "vaparr"; owner = "vaparr";
domain = "overseerr"; domain = "overseerr";

View File

@@ -1,4 +1,10 @@
{ buildHomeAssistantComponent, fetchFromGitHub, pkgs, namespace, ... }: {
buildHomeAssistantComponent,
fetchFromGitHub,
pkgs,
namespace,
...
}:
buildHomeAssistantComponent rec { buildHomeAssistantComponent rec {
owner = "SecKatie"; owner = "SecKatie";
domain = "wyzeapi"; domain = "wyzeapi";

View File

@@ -10,7 +10,10 @@ python3Packages.buildPythonPackage rec {
# do not run tests # do not run tests
doCheck = false; doCheck = false;
nativeBuildInputs = with python3Packages; [ poetry-core requests-cache ]; nativeBuildInputs = with python3Packages; [
poetry-core
requests-cache
];
dependencies = with python3Packages; [ dependencies = with python3Packages; [
requests-cache requests-cache
pydantic pydantic

View File

@@ -1,4 +1,9 @@
{ lib, python3Packages, fetchFromGitHub, ... }: {
lib,
python3Packages,
fetchFromGitHub,
...
}:
python3Packages.buildPythonPackage rec { python3Packages.buildPythonPackage rec {
pname = "magicattr"; pname = "magicattr";

View File

@@ -1,4 +1,9 @@
{ config, inputs, pkgs, ... }: {
config,
inputs,
pkgs,
...
}:
{ {
imports = [ imports = [
./nix.nix ./nix.nix

View File

@@ -19,6 +19,6 @@
}; };
}; };
zsh.enable = true; # default shell on catalina zsh.enable = true; # default shell on catalina
}; };
} }

View File

@@ -52,7 +52,6 @@ in
"name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)" "name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)"
]; ];
windowRule = [ windowRule = [
"size 2160 3356, tag:horizonrdp" "size 2160 3356, tag:horizonrdp"
]; ];
@@ -78,7 +77,7 @@ in
"lp" "lp"
"video" "video"
"i2c" "i2c"
]; # Enable sudo for the user. ]; # Enable sudo for the user.
shell = pkgs.zsh; shell = pkgs.zsh;
packages = with pkgs; [ packages = with pkgs; [
firefox firefox

View File

@@ -4,61 +4,90 @@
{ lib, modulesPath, ... }: { lib, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "uas" "sdhci_pci" ]; boot.initrd.availableKernelModules = [
"uas"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ]; boot.kernelModules = [ ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "none"; device = "none";
fsType = "tmpfs"; fsType = "tmpfs";
}; };
fileSystems."/root" = fileSystems."/root" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "noatime" "subvol=root" ]; options = [
}; "compress=zstd"
"noatime"
"subvol=root"
];
};
fileSystems."/etc" = fileSystems."/etc" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "noatime" "subvol=etc" ]; options = [
}; "compress=zstd"
"noatime"
"subvol=etc"
];
};
fileSystems."/tmp" = fileSystems."/tmp" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "noatime" "subvol=tmp" ]; options = [
}; "compress=zstd"
"noatime"
"subvol=tmp"
];
};
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "noatime" "subvol=nix" ]; options = [
}; "compress=zstd"
"noatime"
"subvol=nix"
];
};
fileSystems."/var/log" = fileSystems."/var/log" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "noatime" "subvol=log" ]; options = [
}; "compress=zstd"
"noatime"
"subvol=log"
];
};
fileSystems."/home" = fileSystems."/home" = {
{ device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc"; device = "/dev/disk/by-uuid/adcc14fa-8bf7-4b4b-a9e4-b038993b96cc";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd" "subvol=home" ]; options = [
}; "compress=zstd"
"subvol=home"
];
};
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/23FA-AD3E"; device = "/dev/disk/by-uuid/23FA-AD3E";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
}; "fmask=0022"
"dmask=0022"
];
};
# swapDevices = [ # swapDevices = [
# { # {

View File

@@ -8,7 +8,7 @@
enable = true; enable = true;
settings = { settings = {
General = { General = {
EnableNetworkConfiguration = true; EnableNetworkConfiguration = true;
}; };
Rank = { Rank = {
BandModifier2_4GHz = 1.0; BandModifier2_4GHz = 1.0;

View File

@@ -93,9 +93,9 @@
"`" = "A-f6"; "`" = "A-f6";
# App shortcuts # App shortcuts
c = "C-insert"; # Copy c = "C-insert"; # Copy
v = "S-insert"; # Paste v = "S-insert"; # Paste
x = "S-delete"; # Cut x = "S-delete"; # Cut
"1" = "A-1"; "1" = "A-1";
"2" = "A-2"; "2" = "A-2";

View File

@@ -21,18 +21,25 @@
# # cp -r ${uefi_pi4}/share/uefi_rpi4/* /boot/firmware/ # # cp -r ${uefi_pi4}/share/uefi_rpi4/* /boot/firmware/
# # ''; # # '';
# } # }
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
let let
kernelBundle = pkgs.linuxAndFirmware.latest; kernelBundle = pkgs.linuxAndFirmware.latest;
in in
{ {
system.nixos.tags = let system.nixos.tags =
cfg = config.boot.loader.raspberry-pi; let
in [ cfg = config.boot.loader.raspberry-pi;
"raspberry-pi-${cfg.variant}" in
cfg.bootloader [
config.boot.kernelPackages.kernel.version "raspberry-pi-${cfg.variant}"
]; cfg.bootloader
config.boot.kernelPackages.kernel.version
];
boot = lib.mkForce { boot = lib.mkForce {
loader.raspberry-pi = { loader.raspberry-pi = {
@@ -43,7 +50,8 @@ in
}; };
hardware.raspberry-pi.config = { hardware.raspberry-pi.config = {
all = { # [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters all = {
# [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters
base-dt-params = { base-dt-params = {
i2c_arm = { i2c_arm = {

View File

@@ -2,7 +2,13 @@
# your system. Help is available in the configuration.nix(5) man page, on # your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). # https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
let let
user = "matt"; user = "matt";
# password = config.sops.secrets."pi4/matt-password".path; # password = config.sops.secrets."pi4/matt-password".path;

View File

@@ -24,7 +24,7 @@ in
settings.connectivity.uri = lib.mkDefault "http://nmcheck.gnome.org/check_network_status.txt"; settings.connectivity.uri = lib.mkDefault "http://nmcheck.gnome.org/check_network_status.txt";
ensureProfiles = { ensureProfiles = {
environmentFiles = [ environmentFiles = [
config.sops.secrets.wifi.path config.sops.secrets.wifi.path
]; ];
profiles = { profiles = {

View File

@@ -5,10 +5,10 @@ in
{ {
sops = { sops = {
defaultSopsFile = lib.mkForce ../../../secrets/pi4-secrets.yaml; defaultSopsFile = lib.mkForce ../../../secrets/pi4-secrets.yaml;
# age = { # age = {
# generateKey = true; # generateKey = true;
# sshKeyPaths = [ "/etc/ssd/ssh_host_ed25519_key" ]; # sshKeyPaths = [ "/etc/ssd/ssh_host_ed25519_key" ];
# }; # };
age.keyFile = "/home/matt/.config/sops/age/keys.txt"; age.keyFile = "/home/matt/.config/sops/age/keys.txt";
validateSopsFiles = false; validateSopsFiles = false;
# ------------------------------ # ------------------------------

View File

@@ -9,7 +9,8 @@ in
}; };
hardware.raspberry-pi.config = { hardware.raspberry-pi.config = {
all = { # [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters all = {
# [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters
options = { options = {
# https://www.raspberrypi.com/documentation/computers/config_txt.html#enable_uart # https://www.raspberrypi.com/documentation/computers/config_txt.html#enable_uart

View File

@@ -2,7 +2,13 @@
# your system. Help is available in the configuration.nix(5) man page, on # your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). # https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, namespace, ... }: {
config,
lib,
pkgs,
namespace,
...
}:
let let
user = "matt"; user = "matt";
password = config.sops.secrets."pi5/matt-password".path; password = config.sops.secrets."pi5/matt-password".path;
@@ -53,13 +59,15 @@ in
]; ];
}; };
system.nixos.tags = let system.nixos.tags =
cfg = config.boot.loader.raspberry-pi; let
in [ cfg = config.boot.loader.raspberry-pi;
"raspberry-pi-${cfg.variant}" in
cfg.bootloader [
config.boot.kernelPackages.kernel.version "raspberry-pi-${cfg.variant}"
]; cfg.bootloader
config.boot.kernelPackages.kernel.version
];
systemd.services.btattach = { systemd.services.btattach = {
before = [ "bluetooth.service" ]; before = [ "bluetooth.service" ];
@@ -90,7 +98,7 @@ in
mutableUsers = false; mutableUsers = false;
users."${user}" = { users."${user}" = {
isNormalUser = true; isNormalUser = true;
# hashedPasswordFile = password; # hashedPasswordFile = password;
password = lib.mkForce "BogieDudie1"; password = lib.mkForce "BogieDudie1";
extraGroups = [ extraGroups = [
"wheel" "wheel"

View File

@@ -1,7 +1,7 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
let let
kernel = pkgs.linuxPackages_cachyos; kernel = pkgs.linuxPackages_cachyos;
pkgsVersion = pkgs; #.unstable; pkgsVersion = pkgs; # .unstable;
in in
{ {
# Configure bootloader with lanzaboot and secureboot # Configure bootloader with lanzaboot and secureboot
@@ -12,7 +12,7 @@ in
"i2c-dev" "i2c-dev"
"ddcci_backlight" "ddcci_backlight"
]; ];
extraModulePackages = [config.boot.kernelPackages.ddcci-driver]; extraModulePackages = [ config.boot.kernelPackages.ddcci-driver ];
loader = { loader = {
efi = { efi = {
canTouchEfiVariables = true; canTouchEfiVariables = true;

View File

@@ -8,7 +8,7 @@
... ...
}: }:
let let
pkgsVersion = pkgs; #.unstable; pkgsVersion = pkgs; # .unstable;
environmentVariables = { environmentVariables = {
STEAM_FORCE_DESKTOPUI_SCALING = "1.0"; STEAM_FORCE_DESKTOPUI_SCALING = "1.0";
GDK_SCALE = "1"; GDK_SCALE = "1";

View File

@@ -1,22 +1,23 @@
{ # Snowfall Lib provides a customized `lib` instance with access to your flake's library # Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs. {
# lib, # as well as the libraries available from your flake's inputs.
# # An instance of `pkgs` with your overlays and packages applied is also available. # lib,
# pkgs, # # An instance of `pkgs` with your overlays and packages applied is also available.
# # You also have access to your flake's inputs. # pkgs,
# inputs, # # You also have access to your flake's inputs.
# inputs,
# Additional metadata is provided by Snowfall Lib. # Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set. namespace, # The namespace used for your flake, defaulting to "internal" if not set.
# system, # The system architecture for this host (eg. `x86_64-linux`). # system, # The system architecture for this host (eg. `x86_64-linux`).
# target, # The Snowfall Lib target for this system (eg. `x86_64-iso`). # target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
# format, # A normalized name for the system target (eg. `iso`). # format, # A normalized name for the system target (eg. `iso`).
# virtual, # A boolean to determine whether this system is a virtual target using nixos-generators. # virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
# systems, # An attribute map of your defined hosts. # systems, # An attribute map of your defined hosts.
# All other arguments come from the system system. # All other arguments come from the system system.
config, config,
... ...
}: }:
let let
passwordFile = config.sops.secrets."desktop/matt_password".path; passwordFile = config.sops.secrets."desktop/matt_password".path;
@@ -31,7 +32,6 @@ in
./nix.nix ./nix.nix
./sops.nix ./sops.nix
./specialisations/hyprland ./specialisations/hyprland
]; ];

View File

@@ -13,10 +13,10 @@ let
]; ];
defaultLocalOptions = [ defaultLocalOptions = [
"compress=zstd" "compress=zstd"
# "autodefrag" # "autodefrag"
"nofail" "nofail"
# "x-systemd.automount" # "x-systemd.automount"
# "auto" # "auto"
"rw" "rw"
]; ];
in in

View File

@@ -26,7 +26,12 @@ in
system = "x86_64-linux"; system = "x86_64-linux";
maxJobs = 10; maxJobs = 10;
sshUser = "admin"; sshUser = "admin";
supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ]; supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
} }
]; ];
}; };

View File

@@ -17,9 +17,9 @@
"`" = "A-f6"; "`" = "A-f6";
# App shortcuts # App shortcuts
c = "C-insert"; # Copy c = "C-insert"; # Copy
v = "S-insert"; # Paste v = "S-insert"; # Paste
x = "S-delete"; # Cut x = "S-delete"; # Cut
"1" = "A-1"; "1" = "A-1";
"2" = "A-2"; "2" = "A-2";

View File

@@ -60,7 +60,7 @@ in
tooltip = false; tooltip = false;
exec = "waybar-hass --get_light light.living_room_lights"; exec = "waybar-hass --get_light light.living_room_lights";
interval = "once"; interval = "once";
format = "{text}";#"󱉓"; format = "{text}"; # "󱉓";
on-click = "waybar-hass --toggle_light light.living_room_lights"; on-click = "waybar-hass --toggle_light light.living_room_lights";
return-type = "json"; return-type = "json";
}; };

View File

@@ -1,4 +1,9 @@
{ config, namespace, lib, ... }: {
config,
namespace,
lib,
...
}:
let let
passwordFile = config.sops.secrets."desktop/matt_password".path; passwordFile = config.sops.secrets."desktop/matt_password".path;
in in

View File

@@ -75,7 +75,7 @@ let
if __name__ == "__main__": if __name__ == "__main__":
main() main()
''; '';
pkgsVersion = pkgs; #.unstable; pkgsVersion = pkgs; # .unstable;
in in
{ {
systemd = { systemd = {

View File

@@ -23,7 +23,10 @@
reverseProxy = { reverseProxy = {
enable = true; enable = true;
host = "actual.mjallen.dev"; host = "actual.mjallen.dev";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
}; };
}; };
@@ -78,7 +81,10 @@
reverseProxy = { reverseProxy = {
enable = true; enable = true;
host = "gitea.mjallen.dev"; host = "gitea.mjallen.dev";
middlewares = [ "crowdsec" "whitelist-geoblock" ]; middlewares = [
"crowdsec"
"whitelist-geoblock"
];
}; };
}; };

View File

@@ -4,43 +4,48 @@ let
in in
{ {
options.nas-apps = mkOption { options.nas-apps = mkOption {
type = types.attrsOf (types.submodule ({ config, name, ... }: { type = types.attrsOf (
options = { types.submodule (
enable = mkOption { { config, name, ... }:
type = types.bool; {
default = false; options = {
}; enable = mkOption {
type = types.bool;
default = false;
};
port = mkOption { port = mkOption {
type = types.int; type = types.int;
default = 80; default = 80;
}; };
localAddress = mkOption { localAddress = mkOption {
type = types.str; type = types.str;
default = "127.0.0.1"; default = "127.0.0.1";
}; };
dataDir = mkOption { dataDir = mkOption {
type = types.str; type = types.str;
default = ""; default = "";
}; };
reverseProxy = { reverseProxy = {
enable = mkOption { enable = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
};
host = mkOption {
type = types.str;
default = "";
};
middlewares = mkOption {
type = with types; listOf str;
default = [ ];
};
};
}; };
host = mkOption { }
type = types.str; )
default = ""; );
};
middlewares = mkOption {
type = with types; listOf str;
default = [ ];
};
};
};
}));
}; };
} }

View File

@@ -207,7 +207,9 @@
]; ];
}; };
}; };
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ nixpkgs.config.allowUnfreePredicate =
"vscode-extension-github-copilot" pkg:
]; builtins.elem (lib.getName pkg) [
"vscode-extension-github-copilot"
];
} }

View File

@@ -14,7 +14,7 @@ in
"diskstats" "diskstats"
"meminfo" "meminfo"
"cpu" "cpu"
"systemd" # Ensures systemd collector is enabled "systemd" # Ensures systemd collector is enabled
"processes" "processes"
]; ];
extraFlags = [ extraFlags = [
@@ -40,15 +40,19 @@ in
scrapeConfigs = [ scrapeConfigs = [
{ {
job_name = "node"; job_name = "node";
static_configs = [{ static_configs = [
targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ]; {
}]; targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ];
}
];
} }
{ {
job_name = "traefik"; job_name = "traefik";
static_configs = [{ static_configs = [
targets = [ "localhost:8082" ]; {
}]; targets = [ "localhost:8082" ];
}
];
} }
]; ];
}; };
@@ -66,12 +70,14 @@ in
provision = { provision = {
enable = true; enable = true;
datasources.settings.datasources = [{ datasources.settings.datasources = [
name = "Prometheus"; {
type = "prometheus"; name = "Prometheus";
access = "proxy"; type = "prometheus";
url = "http://localhost:${toString config.services.prometheus.port}"; access = "proxy";
}]; url = "http://localhost:${toString config.services.prometheus.port}";
}
];
}; };
}; };
}; };

View File

@@ -9,7 +9,7 @@ in
enable = false; enable = false;
package = pkgs.nix-serve-ng; package = pkgs.nix-serve-ng;
secretKeyFile = "/etc/nix/cache-priv-key.pem"; secretKeyFile = "/etc/nix/cache-priv-key.pem";
port = 5000; # Choose your preferred port port = 5000; # Choose your preferred port
openFirewall = true; openFirewall = true;
}; };
@@ -42,8 +42,8 @@ in
attic-client attic-client
]; ];
script = '' script = ''
#!/usr/bin/env bash #!/usr/bin/env bash
attic watch-store nas-cache attic watch-store nas-cache
''; '';
}; };
@@ -339,7 +339,12 @@ in
system = "aarch64-linux"; system = "aarch64-linux";
maxJobs = 4; maxJobs = 4;
sshUser = "matt"; sshUser = "matt";
supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ]; supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
} }
]; ];
}; };

View File

@@ -8,7 +8,8 @@
# enable cuda support # enable cuda support
cudaSupport = true; cudaSupport = true;
allowUnfreePredicate = p: allowUnfreePredicate =
p:
builtins.all ( builtins.all (
license: license:
license.free license.free

View File

@@ -229,8 +229,8 @@ in
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
Nice = 19; # Lowest CPU priority Nice = 19; # Lowest CPU priority
IOSchedulingClass = "idle"; # Lowest I/O priority IOSchedulingClass = "idle"; # Lowest I/O priority
# Prevent multiple instances from running simultaneously # Prevent multiple instances from running simultaneously
ExecStartPre = "${pkgs.coreutils}/bin/rm -f /var/run/btrfs-balance.stamp"; ExecStartPre = "${pkgs.coreutils}/bin/rm -f /var/run/btrfs-balance.stamp";
ExecStopPost = "${pkgs.coreutils}/bin/touch /var/run/btrfs-balance.stamp"; ExecStopPost = "${pkgs.coreutils}/bin/touch /var/run/btrfs-balance.stamp";
@@ -358,8 +358,8 @@ in
# Timer configuration # Timer configuration
timerConfig = { timerConfig = {
OnCalendar = "daily"; # Check every day OnCalendar = "daily"; # Check every day
Persistent = true; # Run immediately if last run was missed Persistent = true; # Run immediately if last run was missed
Unit = "system-update-check.service"; Unit = "system-update-check.service";
}; };
}; };

Some files were not shown because too many files have changed in this diff Show More