Compare commits
14 Commits
updated-in
...
updated-in
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d35434c9f | ||
| 44afbff445 | |||
| 92817fdcad | |||
| e8cca7b1b6 | |||
| 102509b9a8 | |||
| eaa4ee6d05 | |||
| 9659885079 | |||
| 50b575dcb3 | |||
| 165839be07 | |||
| ce99bb114b | |||
| 23629e0662 | |||
| 6954e75a5c | |||
| 539502cea0 | |||
| 00a7eee2af |
14
flake.lock
generated
14
flake.lock
generated
@@ -411,11 +411,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1757364612,
|
||||
"narHash": "sha256-6MSqlWHH15qbWbvS9b6OTGdtIkW6GVb9SSLkEYAMdDw=",
|
||||
"lastModified": 1757627777,
|
||||
"narHash": "sha256-NGUqHQ+/BaUhjgSYQauTihTtNyhhnQRMJ8t7ZSPNpmk=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "cb758d9bc97baa11e80a048e666c99986cabed43",
|
||||
"revCount": 6,
|
||||
"rev": "b7b0f0d5191433bca1377f7d818b800627a83fda",
|
||||
"revCount": 9,
|
||||
"type": "git",
|
||||
"url": "https://git.clerie.de/clerie/mu5001tool.git"
|
||||
},
|
||||
@@ -666,11 +666,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1757347588,
|
||||
"narHash": "sha256-tLdkkC6XnsY9EOZW9TlpesTclELy8W7lL2ClL+nma8o=",
|
||||
"lastModified": 1761373498,
|
||||
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b599843bad24621dcaa5ab60dac98f9b0eb1cabe",
|
||||
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
LoadCredential = "zte-hypermobile-5g-password:${config.sops.secrets."zte-hypermobile-5g-password".path}";
|
||||
Restart = "on-failure";
|
||||
RestartSec = "15s";
|
||||
};
|
||||
script = ''
|
||||
${lib.getExe pkgs.mu5001tool} --password-file ''${CREDENTIALS_DIRECTORY}/zte-hypermobile-5g-password prometheus-exporter --listen-port 9242
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
networking.nat = {
|
||||
enableIPv6 = true;
|
||||
enable = true;
|
||||
externalInterface = "ppp-dtagdsl";
|
||||
externalInterface = "ppp-ncfttb";
|
||||
internalIPv6s = [ "fd00:152:152::/48" "fd00:3214:9453:4920::/64"];
|
||||
internalIPs = [ "10.152.0.0/16" "192.168.32.0/24" ];
|
||||
};
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
{
|
||||
|
||||
## DSL-Uplink
|
||||
networking.vlans."enp1s0.7" = {
|
||||
id = 7;
|
||||
networking.vlans."enp1s0.10" = {
|
||||
id = 10;
|
||||
interface = "enp1s0";
|
||||
};
|
||||
networking.vlans."enp3s0.7" = {
|
||||
id = 7;
|
||||
networking.vlans."enp3s0.10" = {
|
||||
id = 10;
|
||||
interface = "enp3s0";
|
||||
};
|
||||
networking.bridges."net-dsl".interfaces = [
|
||||
"enp1s0.7"
|
||||
"enp3s0.7"
|
||||
"enp1s0.10"
|
||||
"enp3s0.10"
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
# net-gastnetz can only access internet
|
||||
clerie.firewall.extraForwardFilterCommands = ''
|
||||
ip46tables -A forward-filter -i net-gastnetz -o ppp-dtagdsl -j ACCEPT
|
||||
ip46tables -A forward-filter -i net-gastnetz -o ppp-ncfttb -j ACCEPT
|
||||
ip46tables -A forward-filter -i net-gastnetz -j DROP
|
||||
ip46tables -A forward-filter -o net-gastnetz -j DROP
|
||||
'';
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
services.pppd = {
|
||||
enable = true;
|
||||
peers.dtagdsl = {
|
||||
peers.ncfttb = {
|
||||
config = ''
|
||||
plugin pppoe.so net-dsl
|
||||
user "''${PPPD_DTAGDSL_USERNAME}"
|
||||
ifname ppp-dtagdsl
|
||||
user "''${PPPD_NETCOLOGNE_USERNAME}"
|
||||
ifname ppp-ncfttb
|
||||
persist
|
||||
maxfail 0
|
||||
holdoff 5
|
||||
@@ -24,9 +24,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
environment.etc."ppp/peers/dtagdsl".enable = false;
|
||||
environment.etc."ppp/peers/ncfttb".enable = false;
|
||||
|
||||
systemd.services."pppd-dtagdsl".serviceConfig = let
|
||||
systemd.services."pppd-ncfttb".serviceConfig = let
|
||||
preStart = ''
|
||||
mkdir -p /etc/ppp/peers
|
||||
|
||||
@@ -34,22 +34,22 @@
|
||||
umask u=rw,g=,o=
|
||||
|
||||
# Copy config and substitute username
|
||||
rm -f /etc/ppp/peers/dtagdsl
|
||||
${pkgs.envsubst}/bin/envsubst -i "${config.environment.etc."ppp/peers/dtagdsl".source}" > /etc/ppp/peers/dtagdsl
|
||||
rm -f /etc/ppp/peers/ncfttb
|
||||
${pkgs.envsubst}/bin/envsubst -i "${config.environment.etc."ppp/peers/ncfttb".source}" > /etc/ppp/peers/ncfttb
|
||||
|
||||
# Copy login secrets
|
||||
rm -f /etc/ppp/pap-secrets
|
||||
cat ${config.sops.secrets.pppd-dtagdsl-secrets.path} > /etc/ppp/pap-secrets
|
||||
cat ${config.sops.secrets.pppd-ncfttb-secrets.path} > /etc/ppp/pap-secrets
|
||||
rm -f /etc/ppp/chap-secrets
|
||||
cat ${config.sops.secrets.pppd-dtagdsl-secrets.path} > /etc/ppp/chap-secrets
|
||||
cat ${config.sops.secrets.pppd-ncfttb-secrets.path} > /etc/ppp/chap-secrets
|
||||
'';
|
||||
|
||||
preStartFile = pkgs.writeShellApplication {
|
||||
name = "pppd-dtagdsl-pre-start";
|
||||
name = "pppd-ncfttb-pre-start";
|
||||
text = preStart;
|
||||
};
|
||||
in {
|
||||
EnvironmentFile = config.sops.secrets.pppd-dtagdsl-username.path;
|
||||
EnvironmentFile = config.sops.secrets.pppd-ncfttb-username.path;
|
||||
ExecStartPre = [
|
||||
# "+" marks script to be executed without priviledge restrictions
|
||||
"+${lib.getExe preStartFile}"
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
{
|
||||
"wg-monitoring": "ENC[AES256_GCM,data:+k5MgBrj/psMCE1T2jDtCCJI9Q7L+wJ3j83inNkeGp3LSUjoAPtBp4YoyL4=,iv:C19g/Lqi+cWAyiJBMNDtgLc3SDNI9bMBrBPWn+26mVY=,tag:9zIoawuGeGCMbOX1HKR/sQ==,type:str]",
|
||||
"pppd-dtagdsl-username": "ENC[AES256_GCM,data:JC7EyyMoN0p5YwnS9W5I0G5Omhk5usw28UiJrCfifGr+2FUgMrtFYAHQdrtWAELvYNBQDPgrHMmQjGQLhpqqK0hH,iv:/q+Fm63GVBApGInyS8i39V/lo6iv+I2omVh47deq+o8=,tag:LkR+1zTDNWuYkhH2iWT7SA==,type:str]",
|
||||
"pppd-dtagdsl-secrets": "ENC[AES256_GCM,data:c5pOb8It1py/9NXNTgLvt9zmsBVbSLHJt4iXWiNA+Osvomw3r7pgoO/JJh9ujomPMnOlDwN7g+pJ,iv:W36gA8E1mWchN6+8hdMdt2epv/RdS91T5ANB/JTcHCE=,tag:7eZ3fZkjERCVJCXYrABnlQ==,type:str]",
|
||||
"pppd-ncfttb-username": "ENC[AES256_GCM,data:vyOCNm23xsD3Kj+R7zqnBjH4jEIfYpx/YUUGPcVzqMs9pnFEembahtFTl2sNzOFXLfYCYg==,iv:gMfi/6jldkXCnfdvhu5X1VKj58sVsPR8IX8iEECPfgk=,tag:PJGyIASP6RPAdVULEnn+Gg==,type:str]",
|
||||
"pppd-ncfttb-secrets": "ENC[AES256_GCM,data:IEAguET78vdzRo47UvxbDdz+kKgYWVxYakPPu5rNAZ4BCui7DUG3qm2X9bBdHSMA,iv:Q8D58HXkCoVbqwFoYk+dizXNcEP1J63uMaDSNEzfg2g=,tag:R/xG3owmbVDOLM79sfBQjA==,type:str]",
|
||||
"wg-clerie": "ENC[AES256_GCM,data:OEZg8ZoLAdVhKkvB0ai13ID3gPnVUU/xkOjZ4KiJ9MnRbcFu5HBd7Nw6iNwh,iv:edPuaehya2ZvYKkiBqNUbXVDAxAT6yNgETnWtd6it94=,tag:cX12szdQfAcC6cij6zk6Dw==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age16mln27e2p58gu6dpxfclttmuzfnq39mv62kthjpps33g3nl3scfq449857",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3Rkd5WFE3aE5EQzY5ZXV4\nbXVGYmxTdVg1ekRpVjlRUnozY2tMTGloL21RCktjZW95OU9ZZ2owTCtMR1NxaXJn\na2VYS2ttb3VhSjNXOG84UUJtYU04QjAKLS0tIGd3aHM0RldFYnVFdDRVS0Vhc3BF\nckJhYmN6a1FJUC9ibks1cGlRaU1zbFkKE4ClunQ3XGAILwluC6iYFs+rlR02PdhK\njOmPbOlS0aNG0hoC7Z6aetgpj689AkJgl68QVcyvm+ecHH7TOT7l1A==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2024-08-13T14:06:43Z",
|
||||
"mac": "ENC[AES256_GCM,data:yGKY0fi3KQWGHBeyNtQ8EJ6561dKRZ5aAjO9zq3odDtX75i2RSjORIlNjBsVvegBzeo8AkwwnzxNPt2sHl6MKDZfEsysWAi8Wolh4UvHk087AnR/uKvtG6t4uUaNIWej2DEzxUtTQ8QP1afsdqGCf0vZVruNcJ4u2xiQbN2vJPc=,iv:CDXJ5/P+h0Enq/0EL1su1Mw55FVYLy4XPSoUCkRkt+U=,tag:AvRfEDYMBunyIQIVCPbXag==,type:str]",
|
||||
"lastmodified": "2025-10-24T19:16:49Z",
|
||||
"mac": "ENC[AES256_GCM,data:ADhCQ7JxrEq+5ssevuuQVf3uyHcrcNVSzdT8bkFfDFVEE1hKv8q9QsGxhIaKtv4N2gt079fy0YA+WFKH6H8zWb5ONepH4H/mAek2SYgAtmVsxwdWY13zswsJUPi2CfbaCWOqppb9IiDb8+RCbzY2u/8Qqwk8gx/0uw2hr3IJrhM=,iv:c1/TS+W4pQgh2oPT77LX+dUL929YppRYdZCmMl2yN+M=,tag:fTk1sxdeT9xFjDMhqiHZAg==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2024-05-10T13:05:56Z",
|
||||
@@ -24,6 +20,6 @@
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.8.1"
|
||||
"version": "3.10.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,13 +45,18 @@
|
||||
"/mnt/clerie-backup"
|
||||
];
|
||||
doInit = true;
|
||||
repo = "u275370-sub2@u275370.your-storagebox.de:./clerie-backup/" ;
|
||||
repo = "u275370-sub2@u275370.your-storagebox.de:./clerie-backup/";
|
||||
encryption = {
|
||||
mode = "none";
|
||||
};
|
||||
environment = { BORG_RSH = "ssh -p 23 -i /var/src/secrets/ssh/borg-backup-replication-hetzner"; };
|
||||
compression = "auto,lzma";
|
||||
startAt = "*-*-* 04:07:00";
|
||||
|
||||
readWritePaths = [ "/var/lib/prometheus-node-exporter/textfiles" ];
|
||||
postPrune = ''
|
||||
echo "backup_replication_hetzner_last_successful_run_time $(date +%s)" > /var/lib/prometheus-node-exporter/textfiles/backup-replication-hetzner.prom
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
signal-desktop
|
||||
dino
|
||||
fractal
|
||||
tuba
|
||||
flare-signal
|
||||
|
||||
tio
|
||||
xournalpp
|
||||
@@ -23,6 +25,7 @@
|
||||
wireshark
|
||||
tcpdump
|
||||
nmap
|
||||
pkgs."http.server"
|
||||
|
||||
kdePackages.okular
|
||||
chromium-incognito
|
||||
|
||||
@@ -11,7 +11,28 @@ with lib;
|
||||
};
|
||||
users.groups.data-em = {};
|
||||
|
||||
users.users.data-em-mp3 = {
|
||||
group = "data-em-mp3";
|
||||
home = "/data/em-mp3";
|
||||
useDefaultShell = true;
|
||||
isSystemUser = true;
|
||||
};
|
||||
users.groups.data-em-mp3 = {};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /data/em - data-em data-em - -"
|
||||
"d /data/em-mp3 - data-em-mp3 data-em-mp3 - -"
|
||||
];
|
||||
|
||||
systemd.services.convert-flac-dir-to-mp3 = {
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${lib.getExe pkgs.convert-flac-dir-to-mp3} /data/em /data/em-mp3";
|
||||
StateDirectory = "convert-flac-dir-to-mp3";
|
||||
WorkingDirectory = "/var/lib/convert-flac-dir-to-mp3";
|
||||
User = "data-em-mp3";
|
||||
Group = "data-em-mp3";
|
||||
};
|
||||
startAt = "*-*-* 03:47:00";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -53,17 +53,23 @@ in {
|
||||
"mixcloud.clerie.de" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
basicAuthFile = config.sops.secrets.mixcloud-htpasswd.path;
|
||||
locations."/" = {
|
||||
alias = "/data/mixcloud/";
|
||||
basicAuthFile = config.sops.secrets.mixcloud-htpasswd.path;
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
autoindex_exact_size off;
|
||||
'';
|
||||
};
|
||||
locations."/api/" = {
|
||||
alias = "/data/mixcloud/";
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
autoindex_format json;
|
||||
'';
|
||||
};
|
||||
locations."/media/" = {
|
||||
alias = "/data/media/";
|
||||
basicAuthFile = config.sops.secrets.mixcloud-htpasswd.path;
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
autoindex_exact_size off;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
python3,
|
||||
writeTextFile,
|
||||
makeWrapper,
|
||||
runCommand,
|
||||
lib,
|
||||
}:
|
||||
|
||||
@@ -9,6 +10,7 @@
|
||||
text,
|
||||
runtimePackages ? ps: [],
|
||||
pythonPackage ? python3,
|
||||
runtimeInputs ? [],
|
||||
meta ? {},
|
||||
passthru ? {},
|
||||
derivationArgs ? {},
|
||||
@@ -18,13 +20,17 @@ let
|
||||
|
||||
pythonWithPackages = pythonPackage.withPackages runtimePackages;
|
||||
|
||||
in writeTextFile {
|
||||
inherit
|
||||
name
|
||||
meta
|
||||
passthru
|
||||
derivationArgs
|
||||
;
|
||||
in runCommand name ({
|
||||
passAsFile = [ "text" ] ++ (derivationArgs.passAsFile or []);
|
||||
|
||||
meta = {
|
||||
mainProgram = name;
|
||||
} // meta // (derivationArgs.meta or {});
|
||||
|
||||
passthru = passthru // (derivationArgs.passthru or {});
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ] ++ (derivationArgs.nativeBuildInputs or []);
|
||||
|
||||
executable = true;
|
||||
destination = "/bin/${name}";
|
||||
allowSubstitutes = true;
|
||||
@@ -34,4 +40,17 @@ in writeTextFile {
|
||||
|
||||
${text}
|
||||
'';
|
||||
}
|
||||
} // (
|
||||
builtins.removeAttrs derivationArgs [ "passAsFile" "meta" "passthru" "nativeBuildInputs" ]
|
||||
))
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
|
||||
target=$out/bin/${lib.escapeShellArg name}
|
||||
|
||||
cp "$textPath" "$target"
|
||||
|
||||
chmod +x "$target"
|
||||
|
||||
wrapProgram "$target" --prefix PATH : "${lib.makeBinPath runtimeInputs}"
|
||||
''
|
||||
|
||||
109
pkgs/convert-flac-dir-to-mp3/convert-flac-dir-to-mp3.py
Normal file
109
pkgs/convert-flac-dir-to-mp3/convert-flac-dir-to-mp3.py
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
from progress.bar import Bar
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
def files_and_dirs_for_directory(path):
|
||||
filepaths = []
|
||||
dirpaths = []
|
||||
|
||||
for dirpath, dirnames, filenames in path.walk():
|
||||
dirpaths.append(dirpath)
|
||||
|
||||
for filename in filenames:
|
||||
filepath = dirpath / filename
|
||||
filepaths.append(filepath)
|
||||
|
||||
return set(filepaths), set(dirpaths)
|
||||
|
||||
def make_paths_relative(paths, relative_to_path):
|
||||
return set(path.relative_to(relative_to_path) for path in paths)
|
||||
|
||||
def replace_suffix(path, suffix):
|
||||
return path.with_name(path.stem + suffix)
|
||||
|
||||
def convert_filepath(path):
|
||||
if path.suffix == ".flac":
|
||||
return replace_suffix(path, ".mp3")
|
||||
|
||||
return path
|
||||
|
||||
def ffmpeg_flac_to_mp3(in_path, out_path):
|
||||
print("")
|
||||
subprocess.run(["ffmpeg", "-hide_banner", "-loglevel", "warning", "-stats", "-i", in_path, "-ab", "320k", "-map_metadata", "0", "-id3v2_version", "3", out_path], check=True)
|
||||
print("")
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
parser = argparse.ArgumentParser(prog="convert-flac-dir-to-mp3")
|
||||
parser.add_argument("from_dir", type=Path)
|
||||
parser.add_argument("to_dir", type=Path)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
from_path = args.from_dir.absolute()
|
||||
to_path = args.to_dir.absolute()
|
||||
|
||||
if not from_path.exists():
|
||||
raise Exception("from_path does not exist")
|
||||
|
||||
if not to_path.exists():
|
||||
raise Exception("to_path does not exist")
|
||||
|
||||
if not from_path.is_dir():
|
||||
raise Exception("from_path is not a directory")
|
||||
|
||||
if not to_path.is_dir():
|
||||
raise Exception("to_path is not a directory")
|
||||
|
||||
print(f"Converting {from_path} to {to_path}…")
|
||||
|
||||
from_filepaths, from_dirpaths = files_and_dirs_for_directory(from_path)
|
||||
to_filepaths, to_dirpaths = files_and_dirs_for_directory(to_path)
|
||||
|
||||
|
||||
relative_from_filepaths = make_paths_relative(from_filepaths, from_path)
|
||||
relative_to_filepaths = make_paths_relative(to_filepaths, to_path)
|
||||
|
||||
converted_from_filepaths = set(convert_filepath(filepath) for filepath in relative_from_filepaths)
|
||||
|
||||
filepaths_missing_in_to_path = converted_from_filepaths - relative_to_filepaths
|
||||
|
||||
|
||||
relative_from_dirpaths = make_paths_relative(from_dirpaths, from_path)
|
||||
relative_to_dirpaths = make_paths_relative(to_dirpaths, to_path)
|
||||
|
||||
dirpaths_missing_in_to_path = relative_from_dirpaths - relative_to_dirpaths
|
||||
|
||||
print(f"Missing {len(filepaths_missing_in_to_path)} files and {len(dirpaths_missing_in_to_path)} directories")
|
||||
|
||||
if len(dirpaths_missing_in_to_path) > 0:
|
||||
for dirpath in Bar("Creating directories").iter(dirpaths_missing_in_to_path):
|
||||
(to_path / dirpath).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if len(filepaths_missing_in_to_path) > 0:
|
||||
for filepath in Bar("Creating files").iter(filepaths_missing_in_to_path):
|
||||
if filepath in relative_from_filepaths:
|
||||
# Just copy the file
|
||||
shutil.copy(from_path / filepath, to_path / filepath)
|
||||
elif filepath.suffix == ".mp3" and replace_suffix(filepath, ".flac") in relative_from_filepaths:
|
||||
# Convert from flac
|
||||
print("")
|
||||
print(f"Converting {to_path / filepath}…")
|
||||
|
||||
# Tempfile for ffmpeg
|
||||
tmpfilepath = filepath.with_name(".~" + filepath.name)
|
||||
(to_path / tmpfilepath).unlink(missing_ok=True)
|
||||
|
||||
print(f"Using tempfile for ffmpeg {to_path / tmpfilepath}…")
|
||||
|
||||
# Convert
|
||||
ffmpeg_flac_to_mp3(from_path / replace_suffix(filepath, ".flac"), to_path / tmpfilepath)
|
||||
|
||||
# Rename tempfile
|
||||
(to_path / tmpfilepath).rename(to_path / filepath)
|
||||
else:
|
||||
raise Exception("Unable to figure out how to get {to_path / filepath} from {from_path}")
|
||||
8
pkgs/convert-flac-dir-to-mp3/default.nix
Normal file
8
pkgs/convert-flac-dir-to-mp3/default.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
pkgs.clerie-build-support.writePythonScript {
|
||||
name = "convert-flac-dir-to-mp3";
|
||||
runtimePackages = ps: with ps; [ progress ];
|
||||
runtimeInputs = [ pkgs.ffmpeg-headless ];
|
||||
text = builtins.readFile ./convert-flac-dir-to-mp3.py;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
e2fsprogs,
|
||||
gptfdisk,
|
||||
jq,
|
||||
parted,
|
||||
writeShellApplication,
|
||||
@@ -10,6 +11,7 @@ writeShellApplication {
|
||||
text = builtins.readFile ./grow-last-partition-and-filesystem.sh;
|
||||
runtimeInputs = [
|
||||
e2fsprogs
|
||||
gptfdisk
|
||||
jq
|
||||
parted
|
||||
];
|
||||
|
||||
@@ -11,6 +11,9 @@ fi
|
||||
|
||||
DEVICE="$1"
|
||||
|
||||
echo "Move GTP backup header to end of disk"
|
||||
sgdisk "${DEVICE}" --move-second-header
|
||||
|
||||
PARTITIONDATA="$(parted --script --json --fix "${DEVICE}" print)"
|
||||
PARTNUMBER="$(echo "${PARTITIONDATA}" | jq -r '.disk.partitions | last | .number')"
|
||||
PARTNAME="$(echo "${PARTITIONDATA}" | jq -r '.disk.partitions | last | .name')"
|
||||
|
||||
14
pkgs/http.server/default.nix
Normal file
14
pkgs/http.server/default.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
python3,
|
||||
writeShellApplication,
|
||||
}:
|
||||
|
||||
writeShellApplication {
|
||||
name = "http.server";
|
||||
text = ''
|
||||
python3 -m http.server "$@"
|
||||
'';
|
||||
runtimeInputs = [
|
||||
python3
|
||||
];
|
||||
}
|
||||
@@ -12,6 +12,7 @@ final: prev: {
|
||||
clerie-sops-edit = final.callPackage ./clerie-sops/clerie-sops-edit.nix {};
|
||||
clerie-update-nixfiles = final.callPackage ./clerie-update-nixfiles/clerie-update-nixfiles.nix {};
|
||||
chromium-incognito = final.callPackage ./chromium-incognito {};
|
||||
convert-flac-dir-to-mp3 = final.callPackage ./convert-flac-dir-to-mp3 {};
|
||||
curl-timings = final.callPackage ./curl-timings {};
|
||||
factorio-launcher = final.callPackage ./factorio-launcher {};
|
||||
feeds-dir = final.callPackage ./feeds-dir {};
|
||||
@@ -21,6 +22,7 @@ final: prev: {
|
||||
git-pp = final.callPackage ./git-pp {};
|
||||
git-show-link = final.callPackage ./git-show-link {};
|
||||
grow-last-partition-and-filesystem = final.callPackage ./grow-last-partition-and-filesystem {};
|
||||
"http.server" = final.callPackage ./http.server {};
|
||||
nix-remove-result-links = final.callPackage ./nix-remove-result-links {};
|
||||
nixfiles-auto-install = final.callPackage ./nixfiles/nixfiles-auto-install.nix {};
|
||||
nixfiles-generate-config = final.callPackage ./nixfiles/nixfiles-generate-config.nix {};
|
||||
|
||||
Reference in New Issue
Block a user