diff --git a/flake.lock b/flake.lock index 895083e..76fb606 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1728763831, - "narHash": "sha256-KOp33tls7jRAhcmu77aVxKpSMou8QgK0BC+Y3sYLuGo=", + "lastModified": 1729281548, + "narHash": "sha256-MuojlSnwAJAwfhgmW8ZtZrwm2Sko4fqubCvReqbUzYw=", "owner": "nix-community", "repo": "disko", - "rev": "b6215392ec3bd05e9ebfbb2f7945c414096fce8f", + "rev": "a6a3179ddf396dfc28a078e2f169354d0c137125", "type": "github" }, "original": { @@ -20,64 +20,25 @@ "type": "github" } }, - "fix-python": { + "greg": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "grzegorz", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1725463969, - "narHash": "sha256-d3c1TAlIN1PtK+oQP1wO6XbDfmR4SUp/C/4s7G46ARo=", - "owner": "GuillaumeDesforges", - "repo": "fix-python", - "rev": "2926402234c3f99aa8e4608c51d9ffa73ea403c0", - "type": "github" - }, - "original": { - "owner": "GuillaumeDesforges", - "repo": "fix-python", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1689068808, - "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", - "type": "github" - }, - "original": { - "id": "flake-utils", - "type": "indirect" - } - }, - "grzegorz": { - "inputs": { - "fix-python": "fix-python", "nixpkgs": [ "nixpkgs" - ] + ], + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1726861911, - "narHash": "sha256-pXPmVp4AgszzJXlLjj8r9NxoDvxoV4USGaiMwqCyb4M=", - "ref": "refs/heads/master", - "rev": "d10db19d7df5c5c2cd2dcb878376d5d681f6c2f2", - "revCount": 94, + "lastModified": 1722796402, + "narHash": "sha256-Y6PdbTcfzDAZkVTLhTbRJMJCVR3KtCI7QyGqPR141uw=", + "ref": "refs/heads/main", + "rev": "c1438f248020e4c71673c59501ae87ea4f5bec4f", + "revCount": 16, "type": "git", - "url": "https://git.pvv.ntnu.no/Projects/grzegorz.git" + "url": "https://git.pvv.ntnu.no/Projects/greg-ng.git" }, "original": { "type": "git", - "url": "https://git.pvv.ntnu.no/Projects/grzegorz.git" + "url": "https://git.pvv.ntnu.no/Projects/greg-ng.git" } }, "grzegorz-clients": { @@ -158,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1728843132, - "narHash": "sha256-VWIF1sMD6MJZyB+x5z0ZpirQdH8Cqb3avboq1VfSjRg=", + "lastModified": 1729307008, + "narHash": "sha256-QUvb6epgKi9pCu9CttRQW4y5NqJ+snKr1FZpG/x3Wtc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "414e01b61f0015e49353a6104824b9385a430a5d", + "rev": "a9b86fc2290b69375c5542b622088eb6eca2a7c3", "type": "github" }, "original": { @@ -190,11 +151,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1728805616, - "narHash": "sha256-CfPKX2yaHwTOpGqcul89N12zjRfZ8GOSxG24/Ao9BcQ=", + "lastModified": 1729308112, + "narHash": "sha256-Ap+cPeiluam2KFZO+OWuFTl/IkIJfyGYGMgkT2pVCRY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73057677e8557925e999ac54196423fa34418c24", + "rev": "61253596816c4cd65e2a0f474cbc0ac0c6e0f7cf", "type": "github" }, "original": { @@ -247,7 +208,7 @@ "root": { "inputs": { "disko": "disko", - "grzegorz": "grzegorz", + "greg": "greg", "grzegorz-clients": "grzegorz-clients", "matrix-next": "matrix-next", "minecraft-data": "minecraft-data", @@ -259,6 +220,27 @@ "sops-nix": "sops-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "greg", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722651535, + "narHash": "sha256-2uRmNwxe3CO5h7PfvqXrRe8OplXaEdwhqOUtaF13rpU=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "56d83ca6f3c557647476f3720426a7615c22b860", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ @@ -279,21 +261,6 @@ "repo": "sops-nix", "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index b09a986..633f34a 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,10 @@ nix-gitea-themes.url = "git+https://git.pvv.ntnu.no/oysteikt/nix-gitea-themes.git"; nix-gitea-themes.inputs.nixpkgs.follows = "nixpkgs"; - grzegorz.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz.git"; - grzegorz.inputs.nixpkgs.follows = "nixpkgs"; + greg.url = "git+https://git.pvv.ntnu.no/Projects/greg-ng.git"; + greg.inputs.nixpkgs.follows = "nixpkgs"; + # grzegorz.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz.git"; + # grzegorz.inputs.nixpkgs.follows = "nixpkgs"; grzegorz-clients.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz-clients.git"; grzegorz-clients.inputs.nixpkgs.follows = "nixpkgs"; @@ -116,15 +118,21 @@ brzeczyszczykiewicz = stableNixosConfig "brzeczyszczykiewicz" { modules = [ - inputs.grzegorz.nixosModules.grzegorz-kiosk + # inputs.greg.nixosModules.default inputs.grzegorz-clients.nixosModules.grzegorz-webui ]; + overlays = [ + inputs.greg.overlays.default + ]; }; georg = stableNixosConfig "georg" { modules = [ - inputs.grzegorz.nixosModules.grzegorz-kiosk + # inputs.greg.nixosModules.default inputs.grzegorz-clients.nixosModules.grzegorz-webui ]; + overlays = [ + inputs.greg.overlays.default + ]; }; }; diff --git a/modules/greg.nix b/modules/greg.nix new file mode 100644 index 0000000..2e677b4 --- /dev/null +++ b/modules/greg.nix @@ -0,0 +1,139 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.services.greg-ng; +in +{ + options.services.greg-ng = { + enable = lib.mkEnableOption "greg-ng, an mpv based media player"; + + package = lib.mkPackageOption pkgs "greg-ng" { }; + + mpvPackage = lib.mkPackageOption pkgs "mpv" { }; + + enableSway = lib.mkEnableOption "sway as the main window manager"; + + enablePipewire = lib.mkEnableOption "pipewire" // { default = true; }; + + # TODO: create some better descriptions + settings = { + host = lib.mkOption { + type = lib.types.str; + default = "localhost"; + example = "0.0.0.0"; + description = '' + Which host to bind to. + ''; + }; + + port = lib.mkOption { + type = lib.types.port; + default = 8008; + example = 10008; + description = '' + Which port to bind to. + ''; + }; + + mpv-socket-path = lib.mkOption { + type = lib.types.str; + default = "%t/greg-ng-mpv.sock"; + description = '' + Path to the mpv socket. + ''; + }; + + mpv-executable-path = lib.mkOption { + type = lib.types.str; + default = lib.getExe cfg.mpvPackage; + defaultText = lib.literalExpression '' + lib.getExe config.services.greg-ng.mpvPackage + ''; + description = '' + Path to the mpv executable. + ''; + }; + + mpv-config-file = lib.mkOption { + type = with lib.types; nullOr str; + default = null; + description = '' + Path to the mpv config file. + ''; + }; + + auto-start-mpv = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Whether to automatically start mpv. + ''; + }; + + force-auto-start = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Whether to force auto starting mpv. + ''; + }; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + + services.greetd = { + enable = true; + settings = rec { + initial_session = { + command = "${pkgs.sway}/bin/sway"; + user = "greg"; + }; + default_session = initial_session; + }; + }; + + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + }; + }) + (lib.mkIf (cfg.enable && cfg.enablePipewire) { + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + }) + (lib.mkIf (cfg.enable && cfg.enableSway) { + users = { + users.greg = { + isNormalUser = true; + group = "greg"; + uid = 2000; + description = "loud gym bro"; + }; + groups.greg.gid = 2000; + }; + + systemd.user.services.greg-ng = { + description = "greg-ng, an mpv based media player"; + wantedBy = [ "graphical-session.target" ]; + partOf = [ "graphical-session.target" ]; + serviceConfig = { + Type = "simple"; + # Environment = "DISPLAY=:0"; + ExecStart = "${lib.getExe cfg.package} ${lib.cli.toGNUCommandLineShell { } cfg.settings}"; + Restart = "always"; + RestartSec = 3; + }; + }; + }) + ]; +} diff --git a/modules/grzegorz.nix b/modules/grzegorz.nix index 6c0600b..4bc09df 100644 --- a/modules/grzegorz.nix +++ b/modules/grzegorz.nix @@ -1,31 +1,28 @@ {config, lib, pkgs, ...}: let - grg = config.services.grzegorz; + grg = config.services.greg-ng; grgw = config.services.grzegorz-webui; in { - services.pipewire.enable = true; - services.pipewire.alsa.enable = true; - services.pipewire.alsa.support32Bit = true; - services.pipewire.pulse.enable = true; + imports = [ ./greg.nix ]; - users.users.pvv = { - isNormalUser = true; - description = "pvv"; + services.greg-ng = { + enable = true; + settings.host = "localhost"; + settings.port = 31337; + enableSway = true; + enablePipewire = true; }; - services.grzegorz.enable = true; - services.grzegorz.listenAddr = "localhost"; - services.grzegorz.listenPort = 31337; - - services.grzegorz-webui.enable = true; - services.grzegorz-webui.listenAddr = "localhost"; - services.grzegorz-webui.listenPort = 42069; - services.grzegorz-webui.listenWebsocketPort = 42042; - services.grzegorz-webui.hostName = "${config.networking.fqdn}"; - services.grzegorz-webui.apiBase = "http://${toString grg.listenAddr}:${toString grg.listenPort}/api"; + services.grzegorz-webui = { + enable = true; + listenAddr = "localhost"; + listenPort = 42069; + listenWebsocketPort = 42042; + hostName = "${config.networking.fqdn}"; + apiBase = "http://${grg.settings.host}:${toString grg.settings.port}/api"; + }; services.nginx.enable = true; - services.nginx.virtualHosts."${config.networking.fqdn}" = { forceSSL = true; enableACME = true; @@ -40,20 +37,19 @@ in { ''; locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz-webui.listenPort}"; + proxyPass = "http://${grgw.listenAddr}:${toString grgw.listenPort}"; }; # https://github.com/rawpython/remi/issues/216 locations."/websocket" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz-webui.listenWebsocketPort}"; + proxyPass = "http://${grgw.listenAddr}:${toString grgw.listenWebsocketPort}"; proxyWebsockets = true; }; locations."/api" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz.listenPort}"; + proxyPass = "http://${grg.settings.host}:${toString grg.settings.port}"; }; locations."/docs" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz.listenPort}"; + proxyPass = "http://${grg.settings.host}:${toString grg.settings.port}"; }; }; - }