forked from Yuka/c3h-nixfiles
Compare commits
10 commits
Author | SHA1 | Date | |
---|---|---|---|
|
dd18c6753a | ||
|
f868637417 | ||
|
c5349029ab | ||
d1ebaa7a86 | |||
956e105dfb | |||
c698432f2f | |||
dbfb1dfc17 | |||
|
aaaff04b8c | ||
|
3678349769 | ||
457f4ac1af |
9 changed files with 133 additions and 27 deletions
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Leitstelle config management
|
||||
|
||||
To deploy, run `./deploy.sh switch <host>`, where the host is nuc or bemmer.
|
|
@ -38,11 +38,7 @@
|
|||
vim
|
||||
wget
|
||||
jq
|
||||
pavucontrol
|
||||
dosbox
|
||||
vlc
|
||||
ffmpeg-full
|
||||
sox
|
||||
lsof
|
||||
];
|
||||
|
||||
programs.bash.shellAliases = {
|
||||
|
|
13
deploy.sh
13
deploy.sh
|
@ -6,7 +6,7 @@ cd "$(dirname "$0")"
|
|||
if ! command -v nix-build &> /dev/null
|
||||
then
|
||||
echo "Nix installation could not be found. Please follow the instructions linked below."
|
||||
echo "https://nixos.org/manual/nix/unstable/installation/installing-binary.html#multi-user-installation"
|
||||
echo "https://nixos.org/manual/nix/unstable/installation/installing-binary.html"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
@ -24,13 +24,12 @@ fi
|
|||
echo "deploying $host to $target"
|
||||
sleep 1
|
||||
|
||||
tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$tmp"' EXIT
|
||||
sources="$tmp/sources"
|
||||
cp -r $(nix-build nix/sources-dir.nix --no-out-link) $tmp/sources
|
||||
|
||||
set -x
|
||||
system_drv=$(nix-instantiate "<nixpkgs/nixos>" -A config.system.build.toplevel -I $sources -I "nixos-config=$PWD/hosts/$host/configuration.nix")
|
||||
system_drv=$(
|
||||
nix-instantiate "<nixpkgs/nixos>" -A config.system.build.toplevel \
|
||||
-I "$(nix-build nix/sources-dir.nix --no-out-link)" \
|
||||
-I "nixos-config=$PWD/hosts/$host/configuration.nix"
|
||||
)
|
||||
nix-copy-closure --to $target $system_drv
|
||||
system=$(ssh $target "nix-store --realise $system_drv")
|
||||
ssh $target "sudo nix-env -p /nix/var/nix/profiles/system -i $system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration $mode"
|
||||
|
|
68
modules/spotifyd.nix
Normal file
68
modules/spotifyd.nix
Normal file
|
@ -0,0 +1,68 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.spotifyd;
|
||||
toml = pkgs.formats.toml {};
|
||||
warnConfig =
|
||||
if cfg.config != ""
|
||||
then lib.trace "Using the stringly typed .config attribute is discouraged. Use the TOML typed .settings attribute instead."
|
||||
else id;
|
||||
spotifydConf =
|
||||
if cfg.settings != {}
|
||||
then toml.generate "spotify.conf" cfg.settings
|
||||
else warnConfig (pkgs.writeText "spotifyd.conf" cfg.config);
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services.spotifyd = {
|
||||
enable = mkEnableOption "spotifyd, a Spotify playing daemon";
|
||||
|
||||
config = mkOption {
|
||||
default = "";
|
||||
type = types.lines;
|
||||
description = ''
|
||||
(Deprecated) Configuration for Spotifyd. For syntax and directives, see
|
||||
<link xlink:href="https://github.com/Spotifyd/spotifyd#Configuration"/>.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
default = {};
|
||||
type = toml.type;
|
||||
example = { global.bitrate = 320; };
|
||||
description = ''
|
||||
Configuration for Spotifyd. For syntax and directives, see
|
||||
<link xlink:href="https://github.com/Spotifyd/spotifyd#Configuration"/>.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.config == "" || cfg.settings == {};
|
||||
message = "At most one of the .config attribute and the .settings attribute may be set";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.services.spotifyd = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" "sound.target" ];
|
||||
description = "spotifyd, a Spotify playing daemon";
|
||||
environment.SHELL = "/bin/sh";
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${spotifydConf}";
|
||||
Restart = "always";
|
||||
RestartSec = 12;
|
||||
DynamicUser = true;
|
||||
CacheDirectory = "spotifyd";
|
||||
SupplementaryGroups = ["audio"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = [ maintainers.anderslundstedt ];
|
||||
}
|
|
@ -9,6 +9,6 @@ in
|
|||
lib.concatStringsSep "\n" ([
|
||||
"mkdir $out"
|
||||
]
|
||||
++ lib.mapAttrsToList (name: source: "ln -s ${source.outPath} $out/${name}") sources
|
||||
++ lib.mapAttrsToList (name: source: "cp -r --reflink=auto ${source.outPath} $out/${name}") sources
|
||||
)
|
||||
)
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
"homepage": "https://github.com/nmattia/niv",
|
||||
"owner": "nmattia",
|
||||
"repo": "niv",
|
||||
"rev": "e0ca65c81a2d7a4d82a189f1e23a48d59ad42070",
|
||||
"sha256": "1pq9nh1d8nn3xvbdny8fafzw87mj7gsmp6pxkdl65w2g18rmcmzx",
|
||||
"rev": "5830a4dd348d77e39a0f3c4c762ff2663b602d4c",
|
||||
"sha256": "1d3lsrqvci4qz2hwjrcnd8h5vfkg8aypq3sjd4g3izbc8frwz5sm",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/nmattia/niv/archive/e0ca65c81a2d7a4d82a189f1e23a48d59ad42070.tar.gz",
|
||||
"url": "https://github.com/nmattia/niv/archive/5830a4dd348d77e39a0f3c4c762ff2663b602d4c.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||
},
|
||||
"nixos-hardware": {
|
||||
|
@ -17,10 +17,10 @@
|
|||
"homepage": "",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "3aabf78bfcae62f5f99474f2ebbbe418f1c6e54f",
|
||||
"sha256": "10g240brgjz7qi20adwajxwqrqb5zxc79ii1mc20fasgqlf2a8sx",
|
||||
"rev": "2a7063461c3751d83869a2a0a8ebc59e34bec5b2",
|
||||
"sha256": "173ms858wni43l2p7vqjarm2bnjdhpii0zgn46750nyfff1f2184",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixos-hardware/archive/3aabf78bfcae62f5f99474f2ebbbe418f1c6e54f.tar.gz",
|
||||
"url": "https://github.com/NixOS/nixos-hardware/archive/2a7063461c3751d83869a2a0a8ebc59e34bec5b2.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||
},
|
||||
"nixpkgs": {
|
||||
|
@ -29,10 +29,10 @@
|
|||
"homepage": "",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "34ad3ffe08adfca17fcb4e4a47bb5f3b113687be",
|
||||
"sha256": "02li241rz5668nfyp88zfjilxf0mr9yansa93fbl38hjwkhf3ix6",
|
||||
"rev": "581d2d6c9cd5c289002203581d8aa0861963a933",
|
||||
"sha256": "1qpmqj075pppa6ihmkacf491lhq7rpxlcm8cm6h18raardsr3irr",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/34ad3ffe08adfca17fcb4e4a47bb5f3b113687be.tar.gz",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/581d2d6c9cd5c289002203581d8aa0861963a933.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
users.users.c3h.packages = with pkgs; [ chromium firefox mpv youtube-dl ];
|
||||
users.users.c3h.packages = with pkgs; [
|
||||
chromium
|
||||
firefox
|
||||
mpv
|
||||
youtube-dl
|
||||
pavucontrol
|
||||
dosbox
|
||||
vlc
|
||||
ffmpeg-full
|
||||
sox
|
||||
];
|
||||
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
|
|
|
@ -5,8 +5,12 @@
|
|||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = true;
|
||||
hardware.pulseaudio.systemWide = true;
|
||||
hardware.pulseaudio.package = pkgs.pulseaudio;
|
||||
hardware.pulseaudio.package = pkgs.pulseaudioFull;
|
||||
hardware.pulseaudio.tcp.enable = true;
|
||||
hardware.pulseaudio.tcp.anonymousClients.allowedIpRanges = [ "127.0.0.0/8" "::/64" "10.23.42.0/24" ];
|
||||
environment.variables.PULSE_SERVER = "127.0.0.1";
|
||||
hardware.pulseaudio.extraConfig = ''
|
||||
unload-module module-native-protocol-unix
|
||||
load-module module-native-protocol-unix auth-anonymous=1
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,10 +1,36 @@
|
|||
{ config, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
disabledModules = [ "services/audio/spotifyd.nix" ];
|
||||
imports = [ ../modules/spotifyd.nix ];
|
||||
|
||||
|
||||
services.spotifyd = {
|
||||
enable = true;
|
||||
settings.zeroconf_port = 18572;
|
||||
settings.global = {
|
||||
bitrate = 320;
|
||||
zeroconf_port = 18572;
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ config.services.spotifyd.settings.zeroconf_port ];
|
||||
networking.firewall.allowedTCPPorts = [ 4070 config.services.spotifyd.settings.global.zeroconf_port ];
|
||||
networking.firewall.allowedUDPPorts = [ 5353 ];
|
||||
|
||||
systemd.services.restart-spotifyd = {
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
${pkgs.systemd}/bin/systemctl restart spotifyd.service
|
||||
${pkgs.systemd}/bin/systemctl restart pulseaudio.service
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.timers.restart-spotifyd = {
|
||||
wantedBy = [ "timers.target" ];
|
||||
partOf = [ "restart-spotifyd.service" ];
|
||||
timerConfig = {
|
||||
OnCalendar = "*-*-* 07:00:00";
|
||||
Persistent = "True";
|
||||
Unit = "restart-spotifyd.service";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue