From 91be65bc39cf7f65a593c0514044d8174a997c2d Mon Sep 17 00:00:00 2001 From: mjallen18 Date: Fri, 18 Jul 2025 14:50:13 -0500 Subject: [PATCH] functional home assistant --- flake.nix | 20 +++ .../x86_64-linux/admin@nas/default.nix | 0 .../x86_64-linux/admin@nuc/default.nix | 0 .../x86_64-linux/deck@deck/default.nix | 0 .../x86_64-linux/matt@desktop/default.nix | 0 .../x86_64-linux/root@nuc}/default.nix | 13 +- modules/home/desktop/extra/btop/default.nix | 4 +- modules/home/desktop/extra/btop/options.nix | 4 +- modules/home/desktop/extra/kitty/default.nix | 4 +- modules/home/desktop/extra/kitty/options.nix | 4 +- modules/home/desktop/extra/mako/default.nix | 4 +- modules/home/desktop/extra/mako/options.nix | 4 +- .../home/desktop/extra/nwg-dock/default.nix | 4 +- .../home/desktop/extra/nwg-dock/options.nix | 4 +- .../home/desktop/extra/nwg-drawer/default.nix | 4 +- .../home/desktop/extra/nwg-drawer/options.nix | 4 +- .../home/desktop/extra/nwg-panel/default.nix | 4 +- .../home/desktop/extra/nwg-panel/options.nix | 4 +- modules/home/desktop/extra/waybar/default.nix | 14 +- modules/home/desktop/extra/waybar/options.nix | 4 +- .../desktop/extra/waybar/scripts/hass.nix | 47 ++----- .../desktop/extra/waybar/scripts/weather.nix | 11 +- .../home/desktop/extra/wlogout/default.nix | 4 +- .../home/desktop/extra/wlogout/options.nix | 6 +- modules/home/desktop/extra/wofi/default.nix | 5 +- modules/home/desktop/extra/wofi/options.nix | 4 +- modules/home/desktop/gnome/default.nix | 4 +- modules/home/desktop/gnome/options.nix | 4 +- modules/home/desktop/hyprland/default.nix | 19 ++- modules/home/desktop/hyprland/options.nix | 19 ++- modules/home/desktop/hyprland/packages.nix | 122 +++++++++--------- modules/home/desktop/hyprland/theme.nix | 91 +++++++------ modules/home/desktop/hyprland/variables.nix | 62 ++++----- modules/home/programs/code/default.nix | 3 +- modules/nixos/homeassistant/default.nix | 1 + modules/nixos/impermanence/default.nix | 6 + .../services/{services.nix => default.nix} | 0 packages/homeassistant-api/default.nix | 36 ++++++ systems/x86_64-linux/nuc/default.nix | 5 +- systems/x86_64-linux/nuc/impermanence.nix | 37 ------ systems/x86_64-linux/nuc/users.nix | 56 ++++---- 41 files changed, 337 insertions(+), 304 deletions(-) rename systems/x86_64-linux/nas/home.nix => homes/x86_64-linux/admin@nas/default.nix (100%) rename systems/x86_64-linux/nuc/home.nix => homes/x86_64-linux/admin@nuc/default.nix (100%) rename systems/x86_64-linux/deck/home.nix => homes/x86_64-linux/deck@deck/default.nix (100%) rename systems/x86_64-linux/desktop/home.nix => homes/x86_64-linux/matt@desktop/default.nix (100%) rename {modules/root-user => homes/x86_64-linux/root@nuc}/default.nix (62%) rename modules/nixos/services/{services.nix => default.nix} (100%) create mode 100644 packages/homeassistant-api/default.nix delete mode 100755 systems/x86_64-linux/nuc/impermanence.nix diff --git a/flake.nix b/flake.nix index bb4aef8..c276b37 100644 --- a/flake.nix +++ b/flake.nix @@ -159,6 +159,26 @@ ]; }; }; + + overlays = with inputs; [ nix-vscode-extensions.overlays.default ]; + + homes = { + modules = with inputs; [ + sops-nix.homeManagerModules.sops + ]; + + overlays = with inputs; [ + nix-vscode-extensions.overlays.default + ]; + + users = { + "deck@deck" = { + modules = with inputs; [ + steam-rom-manager.homeManagerModules.default + ]; + }; + }; + }; }; # Configure Snowfall Lib, all of these settings are optional. diff --git a/systems/x86_64-linux/nas/home.nix b/homes/x86_64-linux/admin@nas/default.nix similarity index 100% rename from systems/x86_64-linux/nas/home.nix rename to homes/x86_64-linux/admin@nas/default.nix diff --git a/systems/x86_64-linux/nuc/home.nix b/homes/x86_64-linux/admin@nuc/default.nix similarity index 100% rename from systems/x86_64-linux/nuc/home.nix rename to homes/x86_64-linux/admin@nuc/default.nix diff --git a/systems/x86_64-linux/deck/home.nix b/homes/x86_64-linux/deck@deck/default.nix similarity index 100% rename from systems/x86_64-linux/deck/home.nix rename to homes/x86_64-linux/deck@deck/default.nix diff --git a/systems/x86_64-linux/desktop/home.nix b/homes/x86_64-linux/matt@desktop/default.nix similarity index 100% rename from systems/x86_64-linux/desktop/home.nix rename to homes/x86_64-linux/matt@desktop/default.nix diff --git a/modules/root-user/default.nix b/homes/x86_64-linux/root@nuc/default.nix similarity index 62% rename from modules/root-user/default.nix rename to homes/x86_64-linux/root@nuc/default.nix index d885d27..6d8c3c7 100755 --- a/modules/root-user/default.nix +++ b/homes/x86_64-linux/root@nuc/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, lib, ... }: let shellAliases = { update-boot = "nixos-rebuild boot --max-jobs 10"; @@ -6,13 +6,10 @@ let }; in { - imports = [ - ../home/defaults.nix - ../home/git.nix - ../home/shell.nix - ]; - - home.username = "root"; + home = { + username = "root"; + homeDirectory = lib.mkForce "/${config.home.username}"; + }; programs = { zsh.shellAliases = shellAliases; diff --git a/modules/home/desktop/extra/btop/default.nix b/modules/home/desktop/extra/btop/default.nix index 94b5baa..d5b52a0 100755 --- a/modules/home/desktop/extra/btop/default.nix +++ b/modules/home/desktop/extra/btop/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.btop; + cfg = config.mjallen.desktop.extra.btop; nord = import ../../theme/nord.nix; in { diff --git a/modules/home/desktop/extra/btop/options.nix b/modules/home/desktop/extra/btop/options.nix index f70aea3..66d4b1a 100644 --- a/modules/home/desktop/extra/btop/options.nix +++ b/modules/home/desktop/extra/btop/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.btop = { + options.mjallen.desktop.extra.btop = { enable = mkEnableOption "enable btop"; }; } \ No newline at end of file diff --git a/modules/home/desktop/extra/kitty/default.nix b/modules/home/desktop/extra/kitty/default.nix index 2a7d47e..a15f7a3 100755 --- a/modules/home/desktop/extra/kitty/default.nix +++ b/modules/home/desktop/extra/kitty/default.nix @@ -1,7 +1,7 @@ -{ lib, config, namespace, ... }: +{ lib, config, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.kitty; + cfg = config.mjallen.desktop.extra.kitty; in { imports = [ ./options.nix ]; diff --git a/modules/home/desktop/extra/kitty/options.nix b/modules/home/desktop/extra/kitty/options.nix index 1196008..fed553d 100644 --- a/modules/home/desktop/extra/kitty/options.nix +++ b/modules/home/desktop/extra/kitty/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.kitty = { + options.mjallen.desktop.extra.kitty = { enable = mkEnableOption "enable kitty terminal"; font = { diff --git a/modules/home/desktop/extra/mako/default.nix b/modules/home/desktop/extra/mako/default.nix index 5306a8a..9d38cd9 100755 --- a/modules/home/desktop/extra/mako/default.nix +++ b/modules/home/desktop/extra/mako/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.mako; + cfg = config.mjallen.desktop.extra.mako; nord = import ../../theme/nord.nix; in { diff --git a/modules/home/desktop/extra/mako/options.nix b/modules/home/desktop/extra/mako/options.nix index e4e658b..3b8cc98 100644 --- a/modules/home/desktop/extra/mako/options.nix +++ b/modules/home/desktop/extra/mako/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.mako = { + options.mjallen.desktop.extra.mako = { enable = mkEnableOption "enable mako"; fontName = mkOption { diff --git a/modules/home/desktop/extra/nwg-dock/default.nix b/modules/home/desktop/extra/nwg-dock/default.nix index 9ad527b..e2f9549 100644 --- a/modules/home/desktop/extra/nwg-dock/default.nix +++ b/modules/home/desktop/extra/nwg-dock/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.nwg-dock; + cfg = config.mjallen.desktop.extra.nwg-dock; nord = import ../../theme/nord.nix; in { diff --git a/modules/home/desktop/extra/nwg-dock/options.nix b/modules/home/desktop/extra/nwg-dock/options.nix index db33cbd..a101c81 100644 --- a/modules/home/desktop/extra/nwg-dock/options.nix +++ b/modules/home/desktop/extra/nwg-dock/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.nwg-dock = { + options.mjallen.desktop.extra.nwg-dock = { enable = mkEnableOption "enable nwg-dock"; }; } \ No newline at end of file diff --git a/modules/home/desktop/extra/nwg-drawer/default.nix b/modules/home/desktop/extra/nwg-drawer/default.nix index 83bb048..361da8e 100644 --- a/modules/home/desktop/extra/nwg-drawer/default.nix +++ b/modules/home/desktop/extra/nwg-drawer/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.nwg-drawer; + cfg = config.mjallen.desktop.extra.nwg-drawer; nord = import ../../theme/nord.nix; in { diff --git a/modules/home/desktop/extra/nwg-drawer/options.nix b/modules/home/desktop/extra/nwg-drawer/options.nix index d8adfa9..74e35a2 100644 --- a/modules/home/desktop/extra/nwg-drawer/options.nix +++ b/modules/home/desktop/extra/nwg-drawer/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.nwg-drawer = { + options.mjallen.desktop.extra.nwg-drawer = { enable = mkEnableOption "enable nwg-drawer"; }; } \ No newline at end of file diff --git a/modules/home/desktop/extra/nwg-panel/default.nix b/modules/home/desktop/extra/nwg-panel/default.nix index 20d144e..170e29b 100644 --- a/modules/home/desktop/extra/nwg-panel/default.nix +++ b/modules/home/desktop/extra/nwg-panel/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.nwg-dock; + cfg = config.mjallen.desktop.extra.nwg-dock; in { imports = [ ./options.nix ]; diff --git a/modules/home/desktop/extra/nwg-panel/options.nix b/modules/home/desktop/extra/nwg-panel/options.nix index b88eade..7056680 100644 --- a/modules/home/desktop/extra/nwg-panel/options.nix +++ b/modules/home/desktop/extra/nwg-panel/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.nwg-panel = { + options.mjallen.desktop.extra.nwg-panel = { enable = mkEnableOption "enable nwg-panel"; defaultApps = mkOption { diff --git a/modules/home/desktop/extra/waybar/default.nix b/modules/home/desktop/extra/waybar/default.nix index 4e94d17..8fd464b 100755 --- a/modules/home/desktop/extra/waybar/default.nix +++ b/modules/home/desktop/extra/waybar/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.waybar; + cfg = config.mjallen.desktop.extra.waybar; nord = import ../../theme/nord.nix; defaultOpacity = "opacity: 0.85;"; @@ -33,13 +33,13 @@ let ''; in { - imports = [ ./options.nix ]; + imports = [ + ./options.nix + ./scripts/hass.nix + ./scripts/weather.nix + ]; config = mkIf cfg.enable { - imports = [ - ./scripts/hass.nix - ./scripts/weather.nix - ]; # https://github.com/Alexays/Waybar/wiki/Module:-Hyprland # https://www.nerdfonts.com/cheat-sheet diff --git a/modules/home/desktop/extra/waybar/options.nix b/modules/home/desktop/extra/waybar/options.nix index a30e6b1..56a9f28 100644 --- a/modules/home/desktop/extra/waybar/options.nix +++ b/modules/home/desktop/extra/waybar/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.waybar = { + options.mjallen.desktop.extra.waybar = { enable = mkEnableOption "enable waybar"; layer = mkOption { diff --git a/modules/home/desktop/extra/waybar/scripts/hass.nix b/modules/home/desktop/extra/waybar/scripts/hass.nix index cdd805e..202031c 100755 --- a/modules/home/desktop/extra/waybar/scripts/hass.nix +++ b/modules/home/desktop/extra/waybar/scripts/hass.nix @@ -1,43 +1,10 @@ -{ pkgs, ... }: +{ config, lib, namespace, ... }: +with lib; let - homeassistant-api = pkgs.python3.pkgs.buildPythonPackage rec { - pname = "homeassistant_api"; - version = "5.0.0"; - format = "pyproject"; - src = pkgs.fetchPypi { - inherit pname version; - sha256 = "sha256-UNKTtgInrVJtjHb1WVlUbcbhjBOtTX00eHmm54ww0rY="; - }; - - # do not run tests - doCheck = false; - nativeBuildInputs = with pkgs.python3.pkgs; [ poetry-core requests-cache ]; - dependencies = with pkgs.python3.pkgs; [ - requests-cache - pydantic - websockets - ]; - propagatedBuildInputs = with pkgs.python3.pkgs; [ - aiohttp - aiohttp-client-cache - pydantic - requests - requests-cache - simplejson - websockets - ]; - pythonRelaxDeps = [ - "requests-cache" - "pydantic" - "websockets" - ]; - pythonImportsCheck = [ - "homeassistant_api" - ]; - }; + cfg = config.mjallen.desktop.extra.waybar; pythonEnv = pkgs.python3.withPackages (ps: [ - homeassistant-api + pkgs.${namespace}.homeassistant-api ]); waybar-hass = pkgs.writeScriptBin "waybar-hass" '' @@ -102,5 +69,9 @@ let ''; in { - home.packages = [ waybar-hass ]; + imports = [ ../options.nix ]; + + config = lib.mkIf cfg.enable { + home.packages = [ waybar-hass ]; + }; } diff --git a/modules/home/desktop/extra/waybar/scripts/weather.nix b/modules/home/desktop/extra/waybar/scripts/weather.nix index a15e807..8a5a2e9 100644 --- a/modules/home/desktop/extra/waybar/scripts/weather.nix +++ b/modules/home/desktop/extra/waybar/scripts/weather.nix @@ -1,5 +1,8 @@ -{ pkgs, ... }: +{ config, lib, namespace, ... }: +with lib; let + cfg = config.mjallen.desktop.extra.waybar; + waybar-weather = pkgs.writeScriptBin "waybar-weather" '' #!/usr/bin/env nix-shell #! nix-shell -i python3 --pure @@ -429,5 +432,9 @@ let ''; in { - home.packages = [ waybar-weather ]; + imports = [ ../options.nix ]; + + config = lib.mkIf cfg.enable { + home.packages = [ waybar-weather ]; + }; } diff --git a/modules/home/desktop/extra/wlogout/default.nix b/modules/home/desktop/extra/wlogout/default.nix index 9545bd9..b0e885c 100644 --- a/modules/home/desktop/extra/wlogout/default.nix +++ b/modules/home/desktop/extra/wlogout/default.nix @@ -1,7 +1,7 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.wlogout; + cfg = config.mjallen.desktop.extra.wlogout; nord = import ../../theme/nord.nix; in { diff --git a/modules/home/desktop/extra/wlogout/options.nix b/modules/home/desktop/extra/wlogout/options.nix index ac99c53..32a687d 100644 --- a/modules/home/desktop/extra/wlogout/options.nix +++ b/modules/home/desktop/extra/wlogout/options.nix @@ -1,8 +1,8 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.wofi = { - enable = mkEnableOption "enable wofi"; + options.mjallen.desktop.extra.wlogout = { + enable = mkEnableOption "enable wlogout"; fontName = mkOption { type = types.str; diff --git a/modules/home/desktop/extra/wofi/default.nix b/modules/home/desktop/extra/wofi/default.nix index 2d12487..4e99d48 100755 --- a/modules/home/desktop/extra/wofi/default.nix +++ b/modules/home/desktop/extra/wofi/default.nix @@ -1,11 +1,12 @@ -{ config, lib, namespace, ... }: +{ config, lib, ... }: with lib; let - cfg = config.${namespace}.desktop.extra.wofi; + cfg = config.mjallen.desktop.extra.wofi; nord = import ../../theme/nord.nix; in { imports = [ ./options.nix ]; + config = mkIf cfg.enable { programs.wofi = { enable = true; diff --git a/modules/home/desktop/extra/wofi/options.nix b/modules/home/desktop/extra/wofi/options.nix index ac99c53..12862e8 100644 --- a/modules/home/desktop/extra/wofi/options.nix +++ b/modules/home/desktop/extra/wofi/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.extra.wofi = { + options.mjallen.desktop.extra.wofi = { enable = mkEnableOption "enable wofi"; fontName = mkOption { diff --git a/modules/home/desktop/gnome/default.nix b/modules/home/desktop/gnome/default.nix index 2f53e9d..6163524 100644 --- a/modules/home/desktop/gnome/default.nix +++ b/modules/home/desktop/gnome/default.nix @@ -1,6 +1,6 @@ -{ config, lib, pkgs, namespace, ... }: +{ config, lib, pkgs, ... }: let - cfg = config.${namespace}.desktop.gnome; + cfg = config.mjallen.desktop.gnome; in { imports = [ ./options.nix ]; diff --git a/modules/home/desktop/gnome/options.nix b/modules/home/desktop/gnome/options.nix index c0b9f49..549cc33 100644 --- a/modules/home/desktop/gnome/options.nix +++ b/modules/home/desktop/gnome/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, ... }: with lib; { - options.${namespace}.desktop.gnome = { + options.mjallen.desktop.gnome = { enable = mkEnableOption "enable gnome settings"; }; } \ No newline at end of file diff --git a/modules/home/desktop/hyprland/default.nix b/modules/home/desktop/hyprland/default.nix index 481d21d..01d39d6 100755 --- a/modules/home/desktop/hyprland/default.nix +++ b/modules/home/desktop/hyprland/default.nix @@ -1,21 +1,18 @@ -{ config, lib, namespace, pkgs, ... }: +{ config, lib, pkgs, ... }: with lib; let - cfg = config.${namespace}.desktop.hyprland; + cfg = config.mjallen.desktop.hyprland; drawer = "nwg-drawer -fm nautilus -term kitty -mb 10 -mt 10 -ml 10 -mr 10 -pbuseicontheme -i ${config.home-manager.users.matt.gtk.iconTheme.name}"; in { - imports = [ ./options.nix ]; + imports = [ + ./options.nix + ./packages.nix + ./theme.nix + ./variables.nix + ]; config = mkIf cfg.enable { - imports = [ - ./services/hypridle - ./services/hyprlock - ./services/hyprpaper - ./packages.nix - ./theme.nix - ./variables.nix - ]; services = { hyprpolkitagent.enable = true; diff --git a/modules/home/desktop/hyprland/options.nix b/modules/home/desktop/hyprland/options.nix index bbf2b32..eafbc2b 100644 --- a/modules/home/desktop/hyprland/options.nix +++ b/modules/home/desktop/hyprland/options.nix @@ -1,7 +1,7 @@ -{ lib, namespace, ... }: +{ lib, pkgs, ... }: with lib; { - options.${namespace}.desktop.hyprland = { + options.mjallen.desktop.hyprland = { enable = mkEnableOption "enable hyprland desktop"; primaryDisplay = mkOption { @@ -45,8 +45,19 @@ with lib; }; defaultApps = mkOption { - type = attrs; - default = { }; + type = types.submodule { + options = { + browser = mkOption { type = types.package; default = pkgs.firefox; }; + editor = mkOption { type = types.package; default = pkgs.micro; }; + 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."; }; hyprIdle = { diff --git a/modules/home/desktop/hyprland/packages.nix b/modules/home/desktop/hyprland/packages.nix index 6188dff..c888173 100644 --- a/modules/home/desktop/hyprland/packages.nix +++ b/modules/home/desktop/hyprland/packages.nix @@ -1,60 +1,66 @@ -{ pkgs, ... }: +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.mjallen.desktop.hyprland; +in { - home.packages = with pkgs; [ - box64 - brightnessctl - ddcutil - dunst - egl-wayland - file-roller - glib - gnome-calculator - gnome-calendar - gnome-disk-utility - gnome-firmware - gnome-firmware-updater - gnome-font-viewer - gnome-logs - gnome-photos - gnome-tweaks - gnome-weather - gsettings-desktop-schemas - hyprcursor - hyprland - hyprpaper - hyprshot - hyprsysteminfo - kdePackages.qtmultimedia - libnotify - libz - mako - meson - nautilus - networkmanagerapplet - nm-tray - nwg-look - overskride - pamixer - pavucontrol - playerctl - polkit - polkit_gnome - qt5.qtwayland - qt6.qtwayland - rofi-wayland - waybar - wayland-protocols - wayland-utils - waypaper - wev - wl-clipboard - wlogout - wlroots - xdg-desktop-portal-hyprland - xdg-desktop-portal-gtk - xdg-desktop-portal-wlr - xorg.xhost - xsettingsd - xwayland - ]; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + box64 + brightnessctl + ddcutil + dunst + egl-wayland + file-roller + glib + gnome-calculator + gnome-calendar + gnome-disk-utility + gnome-firmware + gnome-firmware-updater + gnome-font-viewer + gnome-logs + gnome-photos + gnome-tweaks + gnome-weather + gsettings-desktop-schemas + hyprcursor + hyprland + hyprpaper + hyprshot + hyprsysteminfo + kdePackages.qtmultimedia + libnotify + libz + mako + meson + nautilus + networkmanagerapplet + nm-tray + nwg-look + overskride + pamixer + pavucontrol + playerctl + polkit + polkit_gnome + qt5.qtwayland + qt6.qtwayland + rofi-wayland + waybar + wayland-protocols + wayland-utils + waypaper + wev + wl-clipboard + wlogout + wlroots + xdg-desktop-portal-hyprland + xdg-desktop-portal-gtk + xdg-desktop-portal-wlr + xorg.xhost + xsettingsd + xwayland + ]; + }; } \ No newline at end of file diff --git a/modules/home/desktop/hyprland/theme.nix b/modules/home/desktop/hyprland/theme.nix index 8a00c91..509ecbd 100644 --- a/modules/home/desktop/hyprland/theme.nix +++ b/modules/home/desktop/hyprland/theme.nix @@ -1,5 +1,8 @@ -{ pkgs, ... }: +{ config, lib, pkgs, ... }: +with lib; let + cfg = config.mjallen.desktop.hyprland; + themeSize = "compact"; # [ "standard" "compact" ] themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ] themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ] @@ -39,55 +42,57 @@ let fontSize = 12; in { - home = { - pointerCursor = { - gtk.enable = true; - package = cursorThemePkg; - name = cursorTheme; - size = cursorSize; - }; - }; - - dconf = { - enable = true; - settings = { - "org/gnome/desktop/interface".color-scheme = "prefer-dark"; - "org/gnome/desktop/interface".cursor-theme = cursorTheme; - "org/gnome/desktop/interface".gtk-theme = gtkTheme; - "org/gnome/desktop/interface".icon-theme = iconTheme; - }; - }; - - gtk = { - enable = true; - - cursorTheme = { - name = cursorTheme; - package = cursorThemePkg; + config = mkIf cfg.enable { + home = { + pointerCursor = { + gtk.enable = true; + package = cursorThemePkg; + name = cursorTheme; + size = cursorSize; + }; }; - theme = { - name = gtkTheme; - package = gtkThemePkg; + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface".color-scheme = "prefer-dark"; + "org/gnome/desktop/interface".cursor-theme = cursorTheme; + "org/gnome/desktop/interface".gtk-theme = gtkTheme; + "org/gnome/desktop/interface".icon-theme = iconTheme; + }; }; - iconTheme = { - name = iconTheme; - package = iconThemePkg; - }; + gtk = { + enable = true; - gtk3.extraConfig = { - gtk-application-prefer-dark-theme = true; - }; + cursorTheme = { + name = cursorTheme; + package = cursorThemePkg; + }; - gtk4.extraConfig = { - gtk-application-prefer-dark-theme = true; - }; + theme = { + name = gtkTheme; + package = gtkThemePkg; + }; - font = { - name = fontName; - package = fontPackage; - size = fontSize; + iconTheme = { + name = iconTheme; + package = iconThemePkg; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = true; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = true; + }; + + font = { + name = fontName; + package = fontPackage; + size = fontSize; + }; }; }; } \ No newline at end of file diff --git a/modules/home/desktop/hyprland/variables.nix b/modules/home/desktop/hyprland/variables.nix index 3844c61..8678f5d 100644 --- a/modules/home/desktop/hyprland/variables.nix +++ b/modules/home/desktop/hyprland/variables.nix @@ -1,37 +1,39 @@ { config, lib, ... }: with lib; let - cfg = config.desktop.hyprland; + cfg = config.mjallen.desktop.hyprland; in { - sessionVariables = { - BROWSER = "${cfg.defaultApps.browser.pname}"; - CLUTTER_BACKEND = "wayland"; - EDITOR = "${cfg.defaultApps.editor.pname}"; - VISUAL = "${cfg.defaultApps.visual.pname}"; - ICON_THEME = settings.iconTheme; - GTK_CSD = "0"; - GTK_THEME = settings.gtkTheme; - GTK_USE_PORTAL = "1"; - HYPRCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name; - HYPRCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size; - MOZ_ENABLE_WAYLAND = "1"; - NIXOS_OZONE_WL = "1"; - NIXOS_XDG_OPEN_USE_PORTAL = "1"; - QT_AUTO_SCREEN_SCALE_FACTOR = "1"; - QT_QPA_PLATFORM = "wayland-egl"; - QT_QPA_PLATFORMTHEME = "gtk3"; - QT_SCALE_FACTOR = "1"; - QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; - SDL_VIDEODRIVER = "wayland"; - TERMINAL = "${cfg.defaultApps.terminal.pname}"; - XCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name; - XCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size; - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CURRENT_DESKTOP = "Hyprland"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_SESSION_DESKTOP = "Hyprland"; - XDG_SESSION_TYPE = "wayland"; + config = mkIf cfg.enable { + home.sessionVariables = { + BROWSER = "${cfg.defaultApps.browser.pname}"; + CLUTTER_BACKEND = "wayland"; + EDITOR = "${cfg.defaultApps.editor.pname}"; + VISUAL = "${cfg.defaultApps.visual.pname}"; + ICON_THEME = settings.iconTheme; + GTK_CSD = "0"; + GTK_THEME = settings.gtkTheme; + GTK_USE_PORTAL = "1"; + HYPRCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name; + HYPRCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size; + MOZ_ENABLE_WAYLAND = "1"; + NIXOS_OZONE_WL = "1"; + NIXOS_XDG_OPEN_USE_PORTAL = "1"; + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + QT_QPA_PLATFORM = "wayland-egl"; + QT_QPA_PLATFORMTHEME = "gtk3"; + QT_SCALE_FACTOR = "1"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + SDL_VIDEODRIVER = "wayland"; + TERMINAL = "${cfg.defaultApps.terminal.pname}"; + XCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name; + XCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CURRENT_DESKTOP = "Hyprland"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_SESSION_DESKTOP = "Hyprland"; + XDG_SESSION_TYPE = "wayland"; + }; }; } \ No newline at end of file diff --git a/modules/home/programs/code/default.nix b/modules/home/programs/code/default.nix index 34439f3..064e4a2 100644 --- a/modules/home/programs/code/default.nix +++ b/modules/home/programs/code/default.nix @@ -40,7 +40,8 @@ in vscode-extensions.yy0931.vscode-sqlite3-editor # 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 ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ { name = "copilot-mcp"; diff --git a/modules/nixos/homeassistant/default.nix b/modules/nixos/homeassistant/default.nix index 169244c..89c8a2f 100755 --- a/modules/nixos/homeassistant/default.nix +++ b/modules/nixos/homeassistant/default.nix @@ -34,6 +34,7 @@ in "adguard" "apple_tv" "analytics" + "backup" "bluetooth" "bluetooth_adapters" "bluetooth_le_tracker" diff --git a/modules/nixos/impermanence/default.nix b/modules/nixos/impermanence/default.nix index 0d35a04..9300e92 100755 --- a/modules/nixos/impermanence/default.nix +++ b/modules/nixos/impermanence/default.nix @@ -13,6 +13,12 @@ "/var/lib/waydroid" "/var/lib/systemd/coredump" "/etc/NetworkManager/system-connections" + "/var/lib/tailscale" + "/var/lib/homeassistant" + "/var/lib/mosquitto" + "/var/lib/music-assistant" + "/var/lib/postgresql" + "/var/lib/zigbee2mqtt" { directory = "/var/lib/colord"; user = "colord"; diff --git a/modules/nixos/services/services.nix b/modules/nixos/services/default.nix similarity index 100% rename from modules/nixos/services/services.nix rename to modules/nixos/services/default.nix diff --git a/packages/homeassistant-api/default.nix b/packages/homeassistant-api/default.nix new file mode 100644 index 0000000..1ae547f --- /dev/null +++ b/packages/homeassistant-api/default.nix @@ -0,0 +1,36 @@ +{ python3Packages, fetchPypi, ... }: +python3Packages.buildPythonPackage rec { + pname = "homeassistant_api"; + version = "5.0.0"; + format = "pyproject"; + src = fetchPypi { + inherit pname version; + sha256 = "sha256-UNKTtgInrVJtjHb1WVlUbcbhjBOtTX00eHmm54ww0rY="; + }; + + # do not run tests + doCheck = false; + nativeBuildInputs = with python3Packages; [ poetry-core requests-cache ]; + dependencies = with python3Packages; [ + requests-cache + pydantic + websockets + ]; + propagatedBuildInputs = with python3Packages; [ + aiohttp + aiohttp-client-cache + pydantic + requests + requests-cache + simplejson + websockets + ]; + pythonRelaxDeps = [ + "requests-cache" + "pydantic" + "websockets" + ]; + pythonImportsCheck = [ + "homeassistant_api" + ]; +} diff --git a/systems/x86_64-linux/nuc/default.nix b/systems/x86_64-linux/nuc/default.nix index e51ab18..c1b66f9 100644 --- a/systems/x86_64-linux/nuc/default.nix +++ b/systems/x86_64-linux/nuc/default.nix @@ -20,7 +20,10 @@ enable = true; }; - ${namespace}.services.home-assistant.enable = true; + ${namespace} = { + services.home-assistant.enable = true; + hardware.disko.enable = true; + }; # Enable nix flakes and nix-command tools nix = { diff --git a/systems/x86_64-linux/nuc/impermanence.nix b/systems/x86_64-linux/nuc/impermanence.nix deleted file mode 100755 index 62b1e37..0000000 --- a/systems/x86_64-linux/nuc/impermanence.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ ... }: -{ - # Set up impernance configuration for things like bluetooth - # In this configuration with /etc and /var/log being persistent, only directories outside of that need to be done here. See hardware configuration for all mountpoints. - - environment.persistence."/nix/persist/system" = { - hideMounts = true; - directories = [ - "/var/lib/bluetooth" - "/var/lib/nixos" - "/var/lib/tailscale" - "/var/lib/homeassistant" - "/var/lib/mosquitto" - "/var/lib/music-assistant" - "/var/lib/postgresql" - "/var/lib/zigbee2mqtt" - "/var/lib/systemd/coredump" - "/etc/NetworkManager/system-connections" - "/etc/secureboot" - { - directory = "/var/lib/private"; - mode = "u=rwx,g=rx,o="; - } - { - directory = "/var/lib/colord"; - user = "colord"; - group = "colord"; - mode = "u=rwx,g=rx,o="; - } - ]; - }; - - security.sudo.extraConfig = '' - # rollback results in sudo lectures after each reboot - Defaults lecture = never - ''; -} diff --git a/systems/x86_64-linux/nuc/users.nix b/systems/x86_64-linux/nuc/users.nix index effa5d3..a0b94b5 100755 --- a/systems/x86_64-linux/nuc/users.nix +++ b/systems/x86_64-linux/nuc/users.nix @@ -10,31 +10,37 @@ in mutableUsers = false; # Admin account - users."${user}" = { - isNormalUser = true; - linger = true; - extraGroups = [ - "wheel" - "networkmanager" - "docker" - "podman" - "libvirtd" - ]; - # hashedPasswordFile = passwordFile; - password = "BogieDudie1"; - shell = pkgs.zsh; - packages = with pkgs; [ - ]; - openssh.authorizedKeys.keys = [ - # macBook - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCw9zq8DLGByI5v2gAn95hKNyOsm3g61a2buxu2BBMFysQJgmZPCCLUqRJKhSM5Vm/JOgsAmdpRBRZQoHD+6S844CJHb4v4VIbjkyQgYCuM7Rst2IOZ5QybvsA2/D0nwytZ+HXQqDj2AagUYDbz0gyyIHkDQ5YGBMkvkWz/h1Vci6aoBM7VihEDM4KlWoTVuPeASGM8r5IZ2FS83Djbqo4ov6AYvLMrKB9Z7hmFgH6R3LE0gxOkzbGVXtSuvJyrjvgytoT22UhATjjxSQ9D+YJXXkQoB3lUdg8OoIquUPjMZpl4mR8ffvseWPfcvD1XlD5t+TOHFqKpESO547tlOBYhdpew+NSgAXpamCU6oyV8tDCywLQu2ucxHRn78u6WXzWHkDtffdhzmk6TZaPhWqVHuTGjR4higBgGqUfSaKOMszt+FDRZAr3HtuQ2+zJ8bowK9fW5OqilTtK2HtQqroD9ApegDNbqOz6kGy5IycSXvqPURy/M4lxZxbtBPuemcJs= mattjallen@MacBook-Pro.local" - # desktop windows - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZ2PYPjZddOzR8OJj16G88KcUhCDLkvrEmpUQP0wKHDUuA27HQQ2ORo66asadwGHY3k1VDZ1ei9l9H++SIIeKOaaUr5yZdktvj4POUNtbd9ZhcS7sZU7BSF+NMDM+h3tImh6z0S7mWvRQOUv3ZM+ZER+5xTWJVG1OOJEpb1drxJk6Qz0wbZKSR7TPNFBLLXlVy7hkNYf07RtDyhCCxNB3hJfa8c+oztnWumwDhDQWLqiUXWIU2QH6iRLGl/WYnujtNvVVaV/Hn3JJkS6MM9dnV3cpoIO0+J7+WfsN9rZ0wXt5yY3GhiGXwmcO5eYVli8lHlLWtK7aYSETyry6CBsLbojzOQO5rSqhpwfF2njAAFAQU0UjLc8PahisIuFKCwHH4iyXXOagiv5K1Mc/0Ak+WhhMPee6vV2p7NTyNpXRvouDbWy5cSRH31WgQ9fK5mIGe5v8nGGqtEhUubUkiOgP+H3UbT2V/nTv/TFKdJcKw+WmizvTrxBmaMjWALlkYl+s= mattl@Jallen-PC" - # desktop nixos - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTBMydhOc6SnOdB5WrEd7X07DrboAtagCUgXiOJjLov matt@matt-nixos" - ]; - }; + users = { + "${user}" = { + isNormalUser = true; + linger = true; + extraGroups = [ + "wheel" + "networkmanager" + "docker" + "podman" + "libvirtd" + ]; + # hashedPasswordFile = passwordFile; + password = "BogieDudie1"; + shell = pkgs.zsh; + packages = with pkgs; [ + ]; + openssh.authorizedKeys.keys = [ + # macBook + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCw9zq8DLGByI5v2gAn95hKNyOsm3g61a2buxu2BBMFysQJgmZPCCLUqRJKhSM5Vm/JOgsAmdpRBRZQoHD+6S844CJHb4v4VIbjkyQgYCuM7Rst2IOZ5QybvsA2/D0nwytZ+HXQqDj2AagUYDbz0gyyIHkDQ5YGBMkvkWz/h1Vci6aoBM7VihEDM4KlWoTVuPeASGM8r5IZ2FS83Djbqo4ov6AYvLMrKB9Z7hmFgH6R3LE0gxOkzbGVXtSuvJyrjvgytoT22UhATjjxSQ9D+YJXXkQoB3lUdg8OoIquUPjMZpl4mR8ffvseWPfcvD1XlD5t+TOHFqKpESO547tlOBYhdpew+NSgAXpamCU6oyV8tDCywLQu2ucxHRn78u6WXzWHkDtffdhzmk6TZaPhWqVHuTGjR4higBgGqUfSaKOMszt+FDRZAr3HtuQ2+zJ8bowK9fW5OqilTtK2HtQqroD9ApegDNbqOz6kGy5IycSXvqPURy/M4lxZxbtBPuemcJs= mattjallen@MacBook-Pro.local" + # desktop windows + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZ2PYPjZddOzR8OJj16G88KcUhCDLkvrEmpUQP0wKHDUuA27HQQ2ORo66asadwGHY3k1VDZ1ei9l9H++SIIeKOaaUr5yZdktvj4POUNtbd9ZhcS7sZU7BSF+NMDM+h3tImh6z0S7mWvRQOUv3ZM+ZER+5xTWJVG1OOJEpb1drxJk6Qz0wbZKSR7TPNFBLLXlVy7hkNYf07RtDyhCCxNB3hJfa8c+oztnWumwDhDQWLqiUXWIU2QH6iRLGl/WYnujtNvVVaV/Hn3JJkS6MM9dnV3cpoIO0+J7+WfsN9rZ0wXt5yY3GhiGXwmcO5eYVli8lHlLWtK7aYSETyry6CBsLbojzOQO5rSqhpwfF2njAAFAQU0UjLc8PahisIuFKCwHH4iyXXOagiv5K1Mc/0Ak+WhhMPee6vV2p7NTyNpXRvouDbWy5cSRH31WgQ9fK5mIGe5v8nGGqtEhUubUkiOgP+H3UbT2V/nTv/TFKdJcKw+WmizvTrxBmaMjWALlkYl+s= mattl@Jallen-PC" + # desktop nixos + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTBMydhOc6SnOdB5WrEd7X07DrboAtagCUgXiOJjLov matt@matt-nixos" + ]; + }; - users.root.shell = pkgs.zsh; + root = { + isSystemUser = true; + isNormalUser = false; + shell = pkgs.zsh; + }; + }; }; } \ No newline at end of file