diff --git a/README.md b/README.md index 4f7e189..719756b 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ NixOS dotfiles and configuration for various hosts and users. - `users//`: Global configurations for individual users that apply across all hosts. This includes secrets (like GPG keys and third-party service passwords), wallpapers, and more. +- [`lib/`](./lib): Nix library function definitions and utilities. + - [`scripts/`](./scripts): Utility scripts for managing the repository. - [`add-host.sh`](./scripts/add-host.sh): Instantiate the keys for a new host configuration. - [`remove-host.sh`](./scripts/remove-host.sh): Remove references to a host. diff --git a/hosts/common/user/configs/gui/spicetify/config/prefs b/hosts/common/user/configs/gui/spicetify/config/prefs index 374b94b..5028bbb 100644 --- a/hosts/common/user/configs/gui/spicetify/config/prefs +++ b/hosts/common/user/configs/gui/spicetify/config/prefs @@ -1,2 +1 @@ app.autostart-mode="off" -storage.last-location="/home/nick/.cache/spotify/Storage" diff --git a/hosts/common/user/configs/gui/spicetify/config/user-prefs b/hosts/common/user/configs/gui/spicetify/config/prefs-user similarity index 100% rename from hosts/common/user/configs/gui/spicetify/config/user-prefs rename to hosts/common/user/configs/gui/spicetify/config/prefs-user diff --git a/hosts/common/user/configs/gui/spicetify/default.nix b/hosts/common/user/configs/gui/spicetify/default.nix index dd27056..54999fb 100644 --- a/hosts/common/user/configs/gui/spicetify/default.nix +++ b/hosts/common/user/configs/gui/spicetify/default.nix @@ -9,6 +9,9 @@ pkgs, ... }: +let + hmConfig = config.home-manager.users.${user}; +in { networking.firewall = { allowedTCPPorts = [ 57621 ]; @@ -59,84 +62,22 @@ ]; }; - systemd.user = { - services = - let - merge = lib.meta.getExe ( - pkgs.writeShellApplication { - name = "merge"; - runtimeInputs = with pkgs; [ - gnugrep - coreutils - ]; - text = builtins.readFile ./config/merge.sh; - } - ); - in - { - spotify-init = { - Unit = { - Description = "Populate Spotify preferences from template"; - After = config.environment.persistence."/persist"."${home}/.config/spotify".mount; - DefaultDependencies = false; - }; + sops.secrets."spotify/username" = { }; - Service = { - ExecStart = "${merge} ${./config/prefs} ${home}/.config/spotify/prefs"; - Type = "oneshot"; - RemainAfterExit = true; - }; - }; + xdg.configFile = { + "spotify/prefs.init" = { + source = ./config/prefs; + onChange = '' + ${config.lib.runtime.merge.keyValue} "${home}/.config/spotify/prefs.init" "${home}/.config/spotify/prefs" + ''; + }; - spotify-init-user = { - Unit = { - Description = "Populate Spotify user preferences from template"; - After = config.environment.persistence."/persist"."${home}/.config/spotify".mount; - DefaultDependencies = false; - }; - - Service = { - ExecStart = lib.meta.getExe ( - pkgs.writeShellApplication { - name = "merge-user"; - text = '' - for USER_DIR in ${home}/.config/spotify/Users/*/; do - ${merge} ${./config/user-prefs} "$USER_DIR/prefs" - done - ''; - } - ); - Type = "oneshot"; - RemainAfterExit = true; - }; - }; - }; - - paths = { - spotify-init = { - Unit = { - Description = "Monitor Spotify directory"; - After = config.environment.persistence."/persist"."${home}/.config/spotify".mount; - }; - - Path.PathExists = "${home}/.config/spotify"; - - Install.WantedBy = [ "graphical-session.target" ]; - }; - - spotify-init-user = { - Unit = { - Description = "Monitor Spotify user directory"; - After = config.environment.persistence."/persist"."${home}/.config/spotify".mount; - }; - - Path = { - PathExists = "${home}/.config/spotify/Users"; - PathModified = "${home}/.config/spotify/Users"; - }; - - Install.WantedBy = [ "graphical-session.target" ]; - }; + "spotify/prefs-user.init" = { + source = ./config/prefs-user; + onChange = '' + user = $(cat "${hmConfig.sops.secrets."spotify/username".path}") + ${config.lib.runtime.merge.keyValue} "${home}/.config/spotify/prefs-user.init" "${home}/.config/spotify/Users/''${user}-user/prefs" + ''; }; }; diff --git a/hosts/eirene/README.md b/hosts/eirene/README.md index 689d669..38a8631 100644 --- a/hosts/eirene/README.md +++ b/hosts/eirene/README.md @@ -15,6 +15,7 @@ - [ ] Spotify - [ ] Authenticate + - [ ] Local Files - [ ] Steam - [ ] Authenticate diff --git a/hosts/eirene/default.nix b/hosts/eirene/default.nix index 85b0999..83a99d5 100644 --- a/hosts/eirene/default.nix +++ b/hosts/eirene/default.nix @@ -6,6 +6,7 @@ }: { imports = [ + ../../lib inputs.disko.nixosModules.disko (import ./format.nix { device = "/dev/disk/by-id/nvme-SAMSUNG_MZVL22T0HBLB-00BL2_S64RNE0R602762"; }) ./hardware-configuration.nix diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..6dd8e76 --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + lib = { + runtime = pkgs.callPackage ./runtime { }; + }; +} diff --git a/lib/runtime/default.nix b/lib/runtime/default.nix new file mode 100644 index 0000000..2b6a45b --- /dev/null +++ b/lib/runtime/default.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + merge = pkgs.callPackage ./merge { }; +} diff --git a/lib/runtime/merge/default.nix b/lib/runtime/merge/default.nix new file mode 100644 index 0000000..ae4daec --- /dev/null +++ b/lib/runtime/merge/default.nix @@ -0,0 +1,13 @@ +{ lib, pkgs, ... }: +{ + keyValue = lib.meta.getExe ( + pkgs.writeShellApplication { + name = "merge-key-value"; + runtimeInputs = with pkgs; [ + gnugrep + coreutils + ]; + text = builtins.readFile ./key-value.sh; + } + ); +} diff --git a/hosts/common/user/configs/gui/spicetify/config/merge.sh b/lib/runtime/merge/key-value.sh similarity index 100% rename from hosts/common/user/configs/gui/spicetify/config/merge.sh rename to lib/runtime/merge/key-value.sh