diff --git a/container/Cloud.nix b/container/Cloud.nix index 35039d8..1032d42 100644 --- a/container/Cloud.nix +++ b/container/Cloud.nix @@ -7,7 +7,7 @@ in { containers.cloud = container.mkContainer cfg { bindMounts = { - "/var/www/html" = { + "/var/lib/nextcloud" = { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; diff --git a/container/Download.nix b/container/Download.nix index 08aad75..cfc7cd2 100644 --- a/container/Download.nix +++ b/container/Download.nix @@ -7,19 +7,11 @@ in { containers.download = container.mkContainer cfg { bindMounts = { - "/var/lib/deluge" = { + "/var/lib/deluge/.config/deluge" = { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; - } // builtins.listToAttrs (lib.imap0 (i: path: - { - name = "/download/${toString i}"; - value = { - hostPath = path; - isReadOnly = false; - }; - } - ) cfg.download); + } // container.attachMedia "download" cfg.download false; config = { ... }: container.mkContainerConfig cfg { services.deluge = { diff --git a/container/Home.nix b/container/Home.nix index e3e702c..09bef96 100644 --- a/container/Home.nix +++ b/container/Home.nix @@ -1,20 +1,20 @@ { container, pkgs, util, ... } @args: let cfg = container.config.home; - package = (pkgs.callpackage ./homer args); + package = (pkgs.callPackage ./homer args); in { containers.home = container.mkContainer cfg { config = { ... }: container.mkContainerConfig cfg { - environment.systempackages = [ package ]; + environment.systemPackages = [ package ]; systemd.packages = [ package ]; services.nginx = { enable = true; - virtualhosts.${cfg.domain} = container.mkserver { + virtualHosts.${cfg.domain} = container.mkServer { default = true; root = "${package}"; locations = { - "/".extraconfig = '' + "/".extraConfig = '' try_files $uri $uri/index.html; ''; }; diff --git a/container/Iot.nix b/container/Iot.nix index 1a81657..c0d7417 100644 --- a/container/Iot.nix +++ b/container/Iot.nix @@ -11,21 +11,27 @@ in { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; - # "/photo" = { - # hostPath = "${cfg.photos}"; - # isReadOnly = true; - # }; - # "/dev/ttyACM0" = { - # hostPath = "/dev/ttyACM0"; - # isReadOnly = false; - # }; - # "/dev/serial/by-id" = { - # hostPath = "/dev/serial/by-id"; - # isReadOnly = false; - # }; - }; + "/dev/ttyACM0" = { + hostPath = "/dev/ttyACM0"; + isReadOnly = false; + }; + "/dev/serial/by-id" = { + hostPath = "/dev/serial/by-id"; + isReadOnly = false; + }; + } // container.attachMedia "photo" cfg.photo true; + + allowedDevices = [ + { + modifier = "rwm"; + node = "/dev/ttyACM0"; + } + ]; + + config = { ... }: container.mkContainerConfig cfg { + # Allow Hass to talk to Zigbee dongle. + users.users.hass.extraGroups = [ "dialout" "tty" ]; - config = { pkgs, ... }: container.mkContainerConfig cfg { services.home-assistant = { # NOTE: Missing: hacs. Inside hacs: `card-mod`, `Clock Weather Card`, `WallPanel` and `Yandex.Station`. enable = true; @@ -39,6 +45,7 @@ in { extraPackages = python3Packages: with python3Packages; [ aiodhcpwatcher aiodiscover + aiogithubapi async-upnp-client ha-av ha-ffmpeg @@ -48,6 +55,7 @@ in { numpy pynacl pyturbojpeg + python-telegram-bot zeroconf ]; configDir = "/var/lib/hass"; diff --git a/container/Mail.nix b/container/Mail.nix index 1e1b20d..7dcd39a 100644 --- a/container/Mail.nix +++ b/container/Mail.nix @@ -1,13 +1,12 @@ # Guide: https://nixos-mailserver.readthedocs.io/en/latest/setup-guide.html -{ container, domain, pkgs, util, const, ... } @args: let - cfg = container.config.mail; +{ container, domain, pkgs, util, const, ... } @args: let cfg = container.config.mail; in { systemd.tmpfiles.rules = container.mkContainerDir cfg [ "data" - "data/indices" - "data/vmail" - "data/sieve" - "data/dkim" + # "data/indices" + # "data/vmail" + # "data/sieve" + # "data/dkim" ]; containers.mail = container.mkContainer cfg { @@ -158,9 +157,14 @@ in { extraConfig = '' # starttls needed for authentication, so the fqdn required to match # the certificate - $config['smtp_server'] = "tls://${config.mailserver.fqdn}"; - $config['smtp_user'] = "%u"; - $config['smtp_pass'] = "%p"; + # $config['smtp_server'] = "tls://${config.mailserver.fqdn}"; + # $config['smtp_server'] = "tls://localhost"; + $config['smtp_server'] = "localhost:25"; + $config['smtp_auth_type'] = null; + $config['smtp_user'] = ""; + $config['smtp_pass'] = ""; + # $config['smtp_user'] = "%u"; + # $config['smtp_pass'] = "%p"; ''; }; diff --git a/container/Paper.nix b/container/Paper.nix index e15dda6..f79cc94 100644 --- a/container/Paper.nix +++ b/container/Paper.nix @@ -1,4 +1,4 @@ -{ container, pkgs, util, ... } @args: let +{ container, pkgs, util, lib, ... } @args: let cfg = container.config.paper; in { systemd.tmpfiles.rules = container.mkContainerDir cfg [ @@ -11,9 +11,15 @@ in { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; + "/var/lib/paperless/media" = { + hostPath = "${lib.elemAt cfg.paper 0}"; + isReadOnly = false; + }; }; - config = { lib, ... }: container.mkContainerConfig cfg { + config = { lib, pkgs, ... }: container.mkContainerConfig cfg { + environment.systemPackages = with pkgs; [ postgresql inetutils ]; + services.paperless = { enable = true; dataDir = "/var/lib/paperless"; @@ -22,6 +28,7 @@ in { port = cfg.port; passwordFile = pkgs.writeText "PaperlessPassword" "root"; settings = { + PAPERLESS_URL = "https://${cfg.domain}"; PAPERLESS_ADMIN_USER = "root"; PAPERLESS_DBHOST = container.config.postgres.address; PAPERLESS_DBENGINE = "postgresql"; diff --git a/container/Pass.nix b/container/Pass.nix index 5b3f70b..ee9dfe6 100644 --- a/container/Pass.nix +++ b/container/Pass.nix @@ -16,10 +16,10 @@ in { config = { ... }: container.mkContainerConfig cfg { services.vaultwarden = { enable = true; - dbBackend = "postgresql"; + dbBackend = "sqlite"; environmentFile = "/var/lib/bitwarden_rs/Env"; config = { - DATABASE_URL = "postgresql://vaultwarden:vaultwarden@${container.config.postgres.address}:${toString container.config.postgres.port}/vaultwarden"; + # DATABASE_URL = "postgresql://vaultwarden:vaultwarden@${container.config.postgres.address}:${toString container.config.postgres.port}/vaultwarden"; DATA_FOLDER = "/var/lib/bitwarden_rs"; DOMAIN = "http://${cfg.domain}"; SIGNUPS_ALLOWED = false; diff --git a/container/Paste.nix b/container/Paste.nix index ff4a698..062a2f2 100644 --- a/container/Paste.nix +++ b/container/Paste.nix @@ -6,6 +6,7 @@ in { "data" "tmp" "nginxtmp" + "config" ]; containers.paste = container.mkContainer cfg { diff --git a/container/Postgres.nix b/container/Postgres.nix index c9c82c3..0cc4725 100644 --- a/container/Postgres.nix +++ b/container/Postgres.nix @@ -22,7 +22,6 @@ in { privatebin = paste; onlyoffice = office; paperless = paper; - vaultwarden = pass; invidious = yt; }; diff --git a/container/Read.nix b/container/Read.nix index a130d7a..c3532ff 100644 --- a/container/Read.nix +++ b/container/Read.nix @@ -11,15 +11,10 @@ in { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; - } // builtins.listToAttrs (lib.imap0 (i: path: - { - name = "/book/${toString i}"; - value = { - hostPath = path; - isReadOnly = true; - }; - } - ) cfg.book); + } + // container.attachMedia "book" cfg.book true + // container.attachMedia "manga" cfg.manga true + ; config = { pkgs, ... }: container.mkContainerConfig cfg { services.kavita = { diff --git a/container/Status.nix b/container/Status.nix index 2b6d7ae..0406e28 100644 --- a/container/Status.nix +++ b/container/Status.nix @@ -14,6 +14,11 @@ in { }; config = { lib, ... }: container.mkContainerConfig cfg { + networking = { + nameservers = lib.mkForce [ + container.config.dns.address + ]; + }; services.uptime-kuma = { enable = true; settings = { diff --git a/container/Watch.nix b/container/Watch.nix index 1785468..2b4842a 100644 --- a/container/Watch.nix +++ b/container/Watch.nix @@ -1,4 +1,4 @@ -{ container, ... } @args: let +{ container, lib, ... } @args: let cfg = container.config.watch; in { systemd.tmpfiles.rules = container.mkContainerDir cfg [ @@ -16,7 +16,31 @@ in { hostPath = "${cfg.storage}/cache"; isReadOnly = false; }; - }; + "/cache" = { + hostPath = "${cfg.storage}/cache"; + isReadOnly = false; + }; + "/dev/dri" = { + hostPath = "/dev/dri"; + isReadOnly = false; + }; + } + // container.attachMedia "anime" cfg.anime true + // container.attachMedia "download" cfg.download true + // container.attachMedia "movie" cfg.movie true + // container.attachMedia "music" cfg.music true + // container.attachMedia "photo" cfg.photo true + // container.attachMedia "show" cfg.show true + // container.attachMedia "study" cfg.study true + // container.attachMedia "work" cfg.work true + // container.attachMedia "youtube" cfg.youtube true; + + allowedDevices = [ + { + modifier = "rwm"; + node = "/dev/dri"; + } + ]; config = { ... }: container.mkContainerConfig cfg { services.jellyfin = { diff --git a/container/default.nix b/container/default.nix index e55aa50..b0249f5 100644 --- a/container/default.nix +++ b/container/default.nix @@ -37,6 +37,16 @@ forceSSL = false; }; + attachMedia = type: paths: ro: builtins.listToAttrs (lib.imap0 (i: path: + { + name = "/${type}/${toString i}"; + value = { + hostPath = path; + isReadOnly = ro; + }; + } + ) paths); + localAccess = "192.168.1.0/24"; config = { @@ -106,6 +116,7 @@ port = 8000; }; paper = { + inherit (media) paper; address = "10.1.0.40"; domain = "paper.${domain}"; port = 28981; @@ -154,7 +165,7 @@ storage = "${storage}/rabbitmq"; }; read = { - inherit (media) book; + inherit (media) book manga; address = "10.1.0.39"; domain = "read.${domain}"; port = 5000; @@ -192,6 +203,7 @@ storage = "${storage}/vpn"; }; watch = { + inherit (media) anime download movie music photo show study work youtube; address = "10.1.0.11"; domain = "watch.${domain}"; port = 8096; diff --git a/container/homer/Config.nix b/container/homer/Config.nix index 037bd1d..f633fba 100644 --- a/container/homer/Config.nix +++ b/container/homer/Config.nix @@ -51,21 +51,21 @@ (mkLink "Cloud" "fa-cloud" "https://${container.config.cloud.domain}") (mkLink "Download" "fa-download" "https://${container.config.download.domain}") (mkLink "Git" "fab fa-git-alt" "https://${container.config.download.domain}") - # (mkLink "Iot" "fa-home" "https://${container.config.iot.domain}") - # (mkLink "Mail" "fa-envelope" "https://${container.config.mail.domain}") - # (mkLink "Paper" "fa-paperclip" "https://${container.config.paper.domain}") - # (mkLink "Pass" "fa-key" "https://${container.config.pass.domain}") - # (mkLink "Paste" "fa-paste" "https://${container.config.paste.domain}") - # (mkLink "Print" "fa-print" "https://${container.config.print.domain}") - # (mkLink "Read" "fa-book" "https://${container.config.read.domain}") - # (mkLink "Search" "fa-search" "https://${container.config.search.domain}") - # (mkLink "Stock" "fa-boxes-stacked" "https://${container.config.stock.domain}") + (mkLink "Iot" "fa-home" "https://${container.config.iot.domain}") + (mkLink "Mail" "fa-envelope" "https://${container.config.mail.domain}") + (mkLink "Paper" "fa-paperclip" "https://${container.config.paper.domain}") + (mkLink "Pass" "fa-key" "https://${container.config.pass.domain}") + (mkLink "Paste" "fa-paste" "https://${container.config.paste.domain}/s") + (mkLink "Print" "fa-print" "https://${container.config.print.domain}") + (mkLink "Read" "fa-book" "https://${container.config.read.domain}") + (mkLink "Search" "fa-search" "https://${container.config.search.domain}") + (mkLink "Stock" "fa-boxes-stacked" "https://${container.config.stock.domain}") # (mkLink "Tool" "fa-toolbox" "https://${container.config.tool.domain}") - # (mkLink "Watch" "fa-film" "https://${container.config.watch.domain}") - # (mkLink "YouTube" "fab fa-youtube" "https://${container.config.yt.domain}") + (mkLink "Watch" "fa-film" "https://${container.config.watch.domain}") + (mkLink "YouTube" "fab fa-youtube" "https://${container.config.yt.domain}") ]) (mkGroup "System" "fa-shield" [ - (mkLink "Hdd" "fa-hard-drive" "https://${container.config.hdd.domain}") + # (mkLink "Hdd" "fa-hard-drive" "https://${container.config.hdd.domain}") (mkLink "NixOS Search" "fa-snowflake" "https://search.nixos.org") (mkLink "Printer" "fa-print" "https://${container.config.printer.domain}") (mkLink "Router" "fa-route" "https://${container.config.router.domain}") diff --git a/flake.nix b/flake.nix index e6c1c86..5d015e9 100644 --- a/flake.nix +++ b/flake.nix @@ -265,7 +265,6 @@ modules = [ ./module/AmdCpu.nix ./module/AmdGpu.nix - ./module/Docker.nix ./module/Ftpd.nix ./module/RemoteBuilder.nix ./module/Sway.nix diff --git a/host/desktop/Container.nix b/host/desktop/Container.nix deleted file mode 100644 index 1f37622..0000000 --- a/host/desktop/Container.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ pkgs -, const -, lib -, config -, util -, poetry2nixJobber -, pkgsJobber -, ... }: let - externalInterface = "enp4s0"; - - args = let - storage = "/storage/hot/container"; - domain = "local"; - host = "192.168.1.3"; - media = { - download = [ "/tmp/download" ]; - photo = [ "/tmp/in" "/tmp/out" ]; - book = [ "/tmp/book_1" "/tmp/book_2" ]; - }; - in { - inherit storage domain host pkgs const lib config util media; - inherit poetry2nixJobber pkgsJobber; - - container = import ../../container args; - }; -in { - imports = [ - # (import ../../container/Proxy.nix args) - ]; - - networking.nat = { - enable = true; - internalInterfaces = [ "ve-+" ]; - inherit externalInterface; - - forwardPorts = with args.container.config; [ - # Dns Server. - { - destination = "${dns.address}:53"; - proto = "udp"; - sourcePort = 53; - } { - destination = "${dns.address}:53"; - proto = "tcp"; - sourcePort = 53; - } - - # Reverse proxy. - { - destination = "${proxy.address}:80"; - proto = "tcp"; - sourcePort = 80; - } { - destination = "${proxy.address}:443"; - proto = "tcp"; - sourcePort = 443; - } - - # Cups. - { - destination = "${print.address}:${toString print.port}"; - proto = "tcp"; - sourcePort = 631; - } { - destination = "${print.address}:6566"; - proto = "tcp"; - sourcePort = 6566; - } - - # Wireguard. - { - destination = "${vpn.address}:${toString vpn.port}"; - proto = "udp"; - sourcePort = 51820; - } - - # Deluge. - { - destination = "${download.address}:${toString download.port}"; - proto = "tcp"; - sourcePort = 8112; - } { - destination = "${download.address}:54630-54631"; - proto = "udp"; - sourcePort = "54630:54631"; - } { - destination = "${download.address}:54630-54631"; - proto = "tcp"; - sourcePort = "54630:54631"; - } - - # Mail. - { - destination = "${mail.address}:25"; - proto = "tcp"; - sourcePort = 25; - } { - destination = "${mail.address}:465"; - proto = "tcp"; - sourcePort = 465; - } { - destination = "${mail.address}:993"; - proto = "tcp"; - sourcePort = 993; - } - ]; - }; -} diff --git a/host/desktop/default.nix b/host/desktop/default.nix index 453124a..277f895 100644 --- a/host/desktop/default.nix +++ b/host/desktop/default.nix @@ -1,6 +1,5 @@ { ... }: { imports = [ - # ./Container.nix ./Filesystem.nix ]; } diff --git a/host/home/Backup.nix b/host/home/Backup.nix index bc0f7fe..19a6781 100644 --- a/host/home/Backup.nix +++ b/host/home/Backup.nix @@ -1,4 +1,4 @@ -{ pkgs, style, util, ... } @args: let +{ pkgs, util, ... } @args: let bash = import ../../module/common/bash args; script = pkgs.writeText "backupScript" '' source ${bash.modules} @@ -12,7 +12,7 @@ path_src="/storage/hot" path_mount="/storage/cold_1" path_backup="''${path_mount}/backup" - path_docker="''${path_backup}/home" + path_container="''${path_backup}/home" path_media="/storage/cold_1/media /storage/cold_2/media" # Check if backup drive is mounted. @@ -36,10 +36,10 @@ archive ColdMedia.txt && rm ColdMedia.txt || report "Backup : Failed to archive media list!" cd - - # Backup docker. - docker=$(archive docker/) - bupsize=$(tdu ''${docker} | awk '{print $1}') - mv ''${docker} ''${path_docker}/ || report "Backup : Failed to save docker!" + # Backup containers. + container=$(archive container/) + bupsize=$(tdu ''${container} | awk '{print $1}') + mv ''${container} ''${path_container}/ || report "Backup : Failed to save containers!" # Backup some media. cd ''${path_src}/media/ @@ -56,9 +56,9 @@ archive_prune ColdMediaTxt 30 cd - - # Prune old Docker copies. - cd ''${path_docker} - archive_prune Docker 7 + # Prune old container copies. + cd ''${path_container} + archive_prune Container 7 cd - # Prune game saves. diff --git a/host/home/Container.nix b/host/home/Container.nix new file mode 100644 index 0000000..b959f6b --- /dev/null +++ b/host/home/Container.nix @@ -0,0 +1,145 @@ +{ pkgs +, const +, lib +, config +, util +, poetry2nixJobber +, pkgsJobber +, ... }: let + externalInterface = "enp7s0"; + + args = let + storage = "/storage/hot/container"; + domain = "voronind.com"; + host = "192.168.1.2"; + media = { + anime = [ "/storage/cold_1/media/anime" "/storage/cold_2/media/anime" ]; + book = [ "/storage/hot/media/book" ]; + download = [ "/storage/hot/download" ]; + manga = [ "/storage/cold_1/media/manga" "/storage/cold_2/media/manga" ]; + movie = [ "/storage/cold_1/media/movie" "/storage/cold_2/media/movie" ]; + music = [ "/storage/hot/media/music" "/storage/cold_2/media/music" ]; + paper = [ "/storage/hot/media/paper" ]; + photo = [ "${storage}/cloud/data/data/cakee/files/media/photo" "/storage/cold_1/backup/tmp/photo" ]; + show = [ "/storage/cold_1/media/show" "/storage/cold_2/media/show" ]; + study = [ "/storage/cold_1/media/study" "/storage/cold_2/media/study" ]; + work = [ "/storage/cold_2/media/work" ]; + youtube = [ "/storage/cold_1/media/youtube" "/storage/cold_2/media/youtube" ]; + }; + in { + inherit storage domain host pkgs const lib config util media; + inherit poetry2nixJobber pkgsJobber; + + container = import ../../container args; + }; +in { + imports = [ + (import ../../container/Change.nix args) + (import ../../container/Cloud.nix args) + (import ../../container/Ddns.nix args) + (import ../../container/Dns.nix args) + (import ../../container/Download.nix args) + (import ../../container/Git.nix args) + # (import ../../container/Hdd.nix args) + (import ../../container/Home.nix args) + (import ../../container/Iot.nix args) + (import ../../container/Jobber.nix args) + (import ../../container/Mail.nix args) + (import ../../container/Office.nix args) + (import ../../container/Paper.nix args) + (import ../../container/Pass.nix args) + (import ../../container/Paste.nix args) + (import ../../container/Photoprocess.nix args) + (import ../../container/Postgres.nix args) + (import ../../container/Print.nix args) + (import ../../container/Proxy.nix args) + (import ../../container/Rabbitmq.nix args) + (import ../../container/Read.nix args) + (import ../../container/Redis.nix args) + (import ../../container/Search.nix args) + (import ../../container/Status.nix args) + (import ../../container/Stock.nix args) + (import ../../container/Vpn.nix args) + (import ../../container/Watch.nix args) + (import ../../container/Yt.nix args) + ]; + + networking.nat = { + enable = true; + internalInterfaces = [ "ve-+" ]; + inherit externalInterface; + + forwardPorts = with args.container.config; [ + # Dns Server. + { + destination = "${dns.address}:53"; + proto = "udp"; + sourcePort = 53; + } { + destination = "${dns.address}:53"; + proto = "tcp"; + sourcePort = 53; + } + + # Reverse proxy. + #{ + # destination = "${proxy.address}:80"; + # proto = "tcp"; + # sourcePort = 80; + #} { + { + destination = "${proxy.address}:443"; + proto = "tcp"; + sourcePort = 443; + } + + # Cups. + { + destination = "${print.address}:${toString print.port}"; + proto = "tcp"; + sourcePort = 631; + } { + destination = "${print.address}:6566"; + proto = "tcp"; + sourcePort = 6566; + } + + # Wireguard. + { + destination = "${vpn.address}:${toString vpn.port}"; + proto = "udp"; + sourcePort = 51820; + } + + # Deluge. + { + destination = "${download.address}:${toString download.port}"; + proto = "tcp"; + sourcePort = 8112; + } { + destination = "${download.address}:54630-54631"; + proto = "udp"; + sourcePort = "54630:54631"; + } { + destination = "${download.address}:54630-54631"; + proto = "tcp"; + sourcePort = "54630:54631"; + } + + # Mail. + { + destination = "${mail.address}:25"; + proto = "tcp"; + sourcePort = 25; + } { + destination = "${mail.address}:465"; + proto = "tcp"; + sourcePort = 465; + } { + destination = "${mail.address}:993"; + proto = "tcp"; + sourcePort = 993; + } + ]; + }; +} diff --git a/host/home/Nextcloud.nix b/host/home/Nextcloud.nix deleted file mode 100644 index f847633..0000000 --- a/host/home/Nextcloud.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ pkgs, style, util, ... } @args: let - bash = import ../../module/common/bash args; - script = '' - docker exec -u 33 cloud php -f /var/www/html/cron.php || notify 'Nextcloud : Failed to run cron.' - ''; -in { - systemd.services.nextcloud = util.mkStaticSystemdService { - enable = true; - description = "Nextcloud worker."; - serviceConfig = { - Type = "oneshot"; - }; - path = with pkgs; [ - bashInteractive - docker - ]; - script = '' - ${pkgs.bashInteractive}/bin/bash ${script} - ''; - }; - - systemd.timers.nextcloud = { - timerConfig = { - OnCalendar = "hourly"; - Persistent = false; - Unit = "nextcloud.service"; - }; - wantedBy = [ "timers.target" ]; - }; -} diff --git a/host/home/PhotosProcess.nix b/host/home/PhotosProcess.nix deleted file mode 100644 index 22a900c..0000000 --- a/host/home/PhotosProcess.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ pkgs, util, ... }: let - script = '' - in="/storage/hot/docker/cloud/data/data/cakee/files/media/photo/" - out="/storage/cold_1/backup/tmp/photo/" - docker run --rm -v "''${in}":/in -v "''${out}":/out voronind.com/photoprocess:latest - ''; -in { - systemd.services.photos_process = util.mkStaticSystemdService { - enable = true; - description = "Process uploaded photos."; - serviceConfig = { - Type = "oneshot"; - }; - path = with pkgs; [ - docker - ]; - script = script; - }; - - systemd.timers.photos_process = { - timerConfig = { - OnCalendar = "daily"; - Persistent = true; - Unit = "photos_process.service"; - }; - wantedBy = [ "timers.target" ]; - }; -} diff --git a/host/home/YandexMusic.nix b/host/home/YandexMusic.nix deleted file mode 100644 index b63d6dc..0000000 --- a/host/home/YandexMusic.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs, util, ... }: let - script = '' - music="/storage/hot/media/music/" - docker run --rm -v "''${music}":/music voronind.com/yamusic:latest - ''; -in { - systemd.services.yandex_music = util.mkStaticSystemdService { - enable = true; - description = "Sync music from Yandex.Music."; - serviceConfig = { - Type = "oneshot"; - }; - path = with pkgs; [ - docker - ]; - script = script; - }; - - systemd.timers.yandex_music = { - timerConfig = { - OnCalendar = "daily"; - Persistent = true; - Unit = "yandex_music.service"; - }; - wantedBy = [ "timers.target" ]; - }; -} diff --git a/host/home/default.nix b/host/home/default.nix index 12da0bc..3e85e0f 100644 --- a/host/home/default.nix +++ b/host/home/default.nix @@ -1,10 +1,8 @@ { ... }: { imports = [ ./Backup.nix + ./Container.nix ./Filesystem.nix ./Network.nix - ./Nextcloud.nix - ./PhotosProcess.nix - ./YandexMusic.nix ]; } diff --git a/module/desktop/firefox/default.nix b/module/desktop/firefox/default.nix index 325147c..2f63dc1 100644 --- a/module/desktop/firefox/default.nix +++ b/module/desktop/firefox/default.nix @@ -53,14 +53,14 @@ in { Default = "Whoogle"; Add = [ { - Alias = "w"; - Description = "Google search proxy."; - IconURL = "https://google.voronind.com/favicon.ico"; + Alias = "s"; + Description = "Searx Search"; + IconURL = "https://search.voronind.com/favicon.ico"; Method = "POST"; - Name = "Whoogle"; + Name = "Searx"; PostData = "q={searchTerms}"; - SuggestURLTemplate = "https://google.voronind.com/autocomplete?q={searchTerms}"; - URLTemplate = "https://google.voronind.com/search?q=%{searchTerms}"; + SuggestURLTemplate = "https://search.voronind.com/autocomplete?q={searchTerms}"; + URLTemplate = "https://search.voronind.com/search?q=%{searchTerms}"; } ]; };