Personal Nix flake
nixos home-manager nix
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: NixOS services module refactor, WIP home assistant service

+112 -34
+1 -1
nix/nixos/modules/default.nix
··· 22 22 ../profiles 23 23 ./boot 24 24 ./ci 25 - ./desktop 26 25 ./deploy 27 26 ./gaming 28 27 ./gui ··· 55 54 nix.enable = lib.mkDefault true; 56 55 pipewire.enable = lib.mkDefault true; 57 56 security.enable = lib.mkDefault true; 57 + services.enable = lib.mkDefault true; 58 58 ssh.enable = lib.mkDefault true; 59 59 syncthing.enable = lib.mkDefault true; 60 60 theming.enable = lib.mkDefault true;
-5
nix/nixos/modules/desktop/default.nix
··· 1 - { 2 - imports = [ 3 - ./swayosd.nix 4 - ]; 5 - }
nix/nixos/modules/desktop/swayosd.nix nix/nixos/modules/services/swayosd.nix
+36 -28
nix/nixos/modules/services/default.nix
··· 3 3 lib, 4 4 ... 5 5 }: let 6 - inherit (lib) mkDefault; 6 + cfg = config.my.services; 7 7 getFileSystemsByFsType = fsType: 8 8 lib.filterAttrs (_: fs: fs.fsType == fsType) config.fileSystems; 9 9 in { 10 - # Services 11 - services = { 12 - acpid.enable = true; 13 - blueman.enable = true; 14 - btrfs.autoScrub = let 15 - btrfsFileSystems = getFileSystemsByFsType "btrfs"; 16 - in 17 - lib.mkIf (btrfsFileSystems != {}) { 10 + imports = [ 11 + ./home-assistant 12 + ./swayosd.nix 13 + ]; 14 + 15 + options.my.services.enable = lib.mkEnableOption "custom services"; 16 + 17 + config = lib.mkIf cfg.enable { 18 + services = { 19 + acpid.enable = true; 20 + blueman.enable = true; 21 + btrfs.autoScrub = let 22 + btrfsFileSystems = getFileSystemsByFsType "btrfs"; 23 + in 24 + lib.mkIf (btrfsFileSystems != {}) { 25 + enable = true; 26 + interval = "monthly"; 27 + fileSystems = lib.attrNames btrfsFileSystems; 28 + }; 29 + devmon.enable = true; 30 + fstrim = { 18 31 enable = true; 19 - interval = "monthly"; 20 - fileSystems = lib.attrNames btrfsFileSystems; 32 + interval = "weekly"; 21 33 }; 22 - devmon.enable = true; 23 - fstrim = { 24 - enable = true; 25 - interval = "weekly"; 26 - }; 27 - fwupd.enable = true; 28 - gvfs.enable = true; 29 - libinput.enable = true; 30 - ollama = { 31 - enable = mkDefault false; 32 - openFirewall = true; 33 - host = "127.0.0.1"; 34 - port = 11434; 34 + fwupd.enable = true; 35 + gvfs.enable = true; 36 + libinput.enable = true; 37 + ollama = { 38 + enable = lib.mkDefault false; 39 + openFirewall = true; 40 + host = "127.0.0.1"; 41 + port = 11434; 42 + }; 43 + power-profiles-daemon.enable = true; 44 + printing.enable = true; 45 + udisks2.enable = true; 46 + upower.enable = true; 35 47 }; 36 - power-profiles-daemon.enable = true; 37 - printing.enable = true; 38 - udisks2.enable = true; 39 - upower.enable = true; 40 48 }; 41 49 }
+75
nix/nixos/modules/services/home-assistant/default.nix
··· 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: let 7 + cfg = config.my.services.home-assistant; 8 + in { 9 + options.my.services.home-assistant = { 10 + enable = lib.mkEnableOption "Home Assistant"; 11 + }; 12 + 13 + config = lib.mkIf cfg.enable { 14 + services.home-assistant = { 15 + enable = true; 16 + openFirewall = true; 17 + # configWritable = true; 18 + # lovelaceConfigWritable = true; 19 + config = { 20 + homeassistant = { 21 + unit_system = "metric"; 22 + temperature_unit = "C"; 23 + time_zone = "America/Sao_Paulo"; 24 + }; 25 + recorder.db_url = "postgresql://@/hass"; 26 + "automation ui" = "!include automations.yaml"; 27 + "scene ui" = "!include scenes.yaml"; 28 + "script ui" = "!include scripts.yaml"; 29 + }; 30 + customComponents = with pkgs.home-assistant-custom-components; [ 31 + localtuya 32 + midea_ac 33 + midea_ac_lan 34 + # sleep_as_android 35 + tuya_local 36 + ]; 37 + customLovelaceModules = with pkgs.home-assistant-custom-lovelace-modules; [ 38 + mushroom 39 + ]; 40 + extraPackages = python3Packages: 41 + with python3Packages; [ 42 + # gtts 43 + psycopg2 44 + ]; 45 + extraComponents = [ 46 + # Minimal working set 47 + "analytics" 48 + "google_translate" 49 + "met" 50 + "radio_browser" 51 + "shopping_list" 52 + # Custom 53 + "adguard" 54 + "asuswrt" 55 + "default_config" 56 + "esphome" 57 + "homeassistant_hardware" 58 + "isal" 59 + "tuya" 60 + "workday" 61 + ]; 62 + }; 63 + 64 + services.postgresql = { 65 + enable = true; 66 + ensureDatabases = ["hass"]; 67 + ensureUsers = [ 68 + { 69 + name = "hass"; 70 + ensureDBOwnership = true; 71 + } 72 + ]; 73 + }; 74 + }; 75 + }