diff --git a/hosts/hermit/configuration.nix b/hosts/hermit/configuration.nix index 4cd5c2d..40d98bd 100644 --- a/hosts/hermit/configuration.nix +++ b/hosts/hermit/configuration.nix @@ -25,7 +25,6 @@ }; modules = { - desktops.hyprland.enable = true; system = { impermanence.enable = false; services = { @@ -59,12 +58,28 @@ }; sound.enable = true; }; - services = { - locate.enable = true; + usrEnv = { + desktops.hyprland.enable = false; - media.mpd = { - enable = true; + programs = { + launchers = { + fuzzel.enable = true; + }; + + media = { + beets.enable = true; + mpv.enable = true; + ncmpcpp.enable = true; + }; }; + services = { + locate.enable = true; + + media.mpd = { + enable = true; + }; + }; + }; other = { system.username = "cr"; diff --git a/hosts/temperance/configuration.nix b/hosts/temperance/configuration.nix index 6906c02..9c9635b 100644 --- a/hosts/temperance/configuration.nix +++ b/hosts/temperance/configuration.nix @@ -70,13 +70,25 @@ in { sound.enable = true; hardware.nvidia.enable = true; }; - desktops.hyprland.enable = true; + usrEnv = { + desktops.hyprland.enable = true; - services = { - locate.enable = true; - media.mpd = { - enable = true; - musicDirectory = "/home/${config.modules.other.system.username}/cloud/media/Music"; + programs = { + media = { + beets.enable = true; + mpv.enable = true; + ncmpcpp.enable = true; + }; + }; + services = { + locate.enable = true; + kmscon.enable = false; + greetd.enable = true; + + media.mpd = { + enable = true; + musicDirectory = "/home/${config.modules.other.system.username}/cloud/media/Music"; + }; }; }; other = { diff --git a/hosts/tower/configuration.nix b/hosts/tower/configuration.nix index aa39d5e..1be71fa 100644 --- a/hosts/tower/configuration.nix +++ b/hosts/tower/configuration.nix @@ -25,9 +25,6 @@ mainUser.gitSigningKey = ""; }; modules = { - services = { - locate.enable = true; - }; system = { services.forgejo.enable = true; programs = { @@ -37,6 +34,13 @@ eza.enable = true; }; }; + usrEnv = { + desktops.hyprland.enable = false; + + services = { + locate.enable = true; + }; + }; other = { system = { username = "cr"; diff --git a/modules/options/usrEnv/desktop.nix b/modules/options/usrEnv/desktop.nix new file mode 100644 index 0000000..193f6cb --- /dev/null +++ b/modules/options/usrEnv/desktop.nix @@ -0,0 +1,81 @@ +{ + config, + pkgs, + lib, + ... +}: let + cfg = config.modules.usrEnv; + inherit (lib.options) mkOption; + inherit (lib.types) bool enum package; +in { + options.modules.usrEnv = { + desktop = mkOption { + type = enum ["none" "Hyprland" "awesomewm" "i3"]; + default = "none"; + description = '' + The desktop environment to be used. + ''; + }; + + desktops = { + hyprland = { + enable = mkOption { + type = bool; + default = cfg.desktop == "Hyprland"; + description = '' + Whether to enable Hyprland wayland compositor. + + Will be enabled automatically when `modules.usrEnv.desktop` + is set to "Hyprland". + + ''; + }; + + package = mkOption { + type = package; + default = pkgs.hyprland; + description = '' + The Hyprland package to be used. + ''; + }; + portalPackage = mkOption { + type = package; + default = pkgs.xdg-desktop-portal-hyprland; + description = "The hyprland portal package"; + }; + }; + + awesomwm.enable = mkOption { + type = bool; + default = cfg.desktop == "awesomewm"; + description = '' + Whether to enable Awesome window manager + + Will be enabled automatically when `modules.usrEnv.desktop` + is set to "awesomewm". + ''; + }; + + i3 = { + enable = mkOption { + type = bool; + default = cfg.desktop == "i3"; + description = '' + Whether to enable i3 window manager + + Will be enabled automatically when `modules.usrEnv.desktop` + is set to "i3". + ''; + }; + + package = mkOption { + type = package; + default = pkgs.i3; + description = '' + The i3 package to be used. + ''; + }; + }; + }; + }; +} diff --git a/modules/options/usrEnv/module.nix b/modules/options/usrEnv/module.nix new file mode 100644 index 0000000..3856c77 --- /dev/null +++ b/modules/options/usrEnv/module.nix @@ -0,0 +1,8 @@ +_: { + imports = [ + ./desktop.nix + ./programs/media.nix + ./programs/launchers.nix + ./services/default.nix + ]; +} diff --git a/modules/options/usrEnv/programs/launchers.nix b/modules/options/usrEnv/programs/launchers.nix new file mode 100644 index 0000000..a9974ba --- /dev/null +++ b/modules/options/usrEnv/programs/launchers.nix @@ -0,0 +1,10 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; +in { + options.modules.usrEnv.programs.launchers = { + anyrun.enable = mkEnableOption "anyrun application launcher"; + rofi.enable = mkEnableOption "rofi application launcher"; + tofi.enable = mkEnableOption "tofi application launcher"; + fuzzel.enable = mkEnableOption "fuzzel application launcher"; + }; +} diff --git a/modules/options/usrEnv/programs/media.nix b/modules/options/usrEnv/programs/media.nix new file mode 100644 index 0000000..209aa7a --- /dev/null +++ b/modules/options/usrEnv/programs/media.nix @@ -0,0 +1,60 @@ +{ + config, + pkgs, + lib, + ... +}: let + inherit (lib.options) mkOption mkEnableOption literalExpression; + inherit (lib.types) bool listOf package; +in { + options.modules.usrEnv.programs.media = { + addDefaultPackages = mkOption { + type = bool; + default = true; + description = '' + Whether to enable the default list of media-related packages ranging from audio taggers + to video editors. + ''; + }; + + extraPackages = mkOption { + type = listOf package; + default = []; + description = '' + Additional packages that will be appended to media related packages. + ''; + }; + + ncmpcpp.enable = mkEnableOption "ncmpcpp TUI music player"; + + beets.enable = + mkEnableOption '' + beets media library system. + + + Will be enabled automatically if {option}`config.modules.usrEnv.services.mpd.enabled` + is set to true + '' + // {default = config.modules.usrEnv.services.media.mpd.enable;}; + + mpv = { + enable = mkEnableOption "mpv media player"; + scripts = mkOption { + type = listOf package; + description = "A list of MPV scripts that will be enabled"; + example = literalExpression ''[ pkgs.mpvScripts.cutter ]''; + default = with pkgs.mpvScripts; [ + # from nixpkgs + cutter # cut and automatically concat videos + mpris # MPRIS plugin + thumbnail # OSC seekbar thumbnails + thumbfast # on-the-fly thumbnailer + sponsorblock # skip sponsored segments + uosc # proximity UI + quality-menu # ytdl-format quality menu + seekTo # seek to specific pos. + ]; + }; + }; + }; +} diff --git a/modules/options/usrEnv/services/default.nix b/modules/options/usrEnv/services/default.nix new file mode 100644 index 0000000..cdb5b77 --- /dev/null +++ b/modules/options/usrEnv/services/default.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + ... +}: let + inherit (lib.options) mkOption mkEnableOption; + inherit (lib) types; + inherit (config.meta.mainUser) username; +in { + options.modules.usrEnv.services = { + locate.enable = mkEnableOption "Locate service"; + media = { + mpd = { + enable = mkEnableOption "mpd service"; + musicDirectory = mkOption { + description = "music directory for mpd"; + type = types.str; + default = "/home/${username}/cloud/media/Music"; + }; + }; + }; + kmscon.enable = mkEnableOption "Kmscon"; + greetd.enable = mkEnableOption "Greetd"; + }; +} diff --git a/modules/services/kmscon.nix b/modules/services/kmscon.nix new file mode 100644 index 0000000..6908237 --- /dev/null +++ b/modules/services/kmscon.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib) mkIf; + cfg = config.modules.usrEnv.services.kmscon; +in { + services.kmscon = mkIf cfg.enable { + enable = false; + hwRender = true; + fonts = [ + { + name = "Iosevka"; + package = pkgs.iosevka; + } + ]; + extraOptions = "--term xterm-256color"; + extraConfig = '' + font-size=18 + xkb-layout=${config.console.keyMap} + ''; + }; +} diff --git a/modules/services/locate.nix b/modules/services/locate.nix index 001db4b..fb931c2 100644 --- a/modules/services/locate.nix +++ b/modules/services/locate.nix @@ -4,11 +4,9 @@ pkgs, ... }: let - cfg = config.modules.services.locate; - inherit (lib.modules) mkIf; - inherit (lib.options) mkEnableOption; + cfg = config.modules.usrEnv.services.locate; + inherit (lib) mkIf; in { - options.modules.services.locate.enable = mkEnableOption "Locate service"; config = mkIf cfg.enable { environment.systemPackages = with pkgs; [plocate]; services.locate = { diff --git a/modules/services/module.nix b/modules/services/module.nix index b874528..59ee7a0 100644 --- a/modules/services/module.nix +++ b/modules/services/module.nix @@ -7,5 +7,6 @@ _: { ./mako.nix ./mpd.nix ./firewall.nix + ./kmscon.nix ]; } diff --git a/modules/services/mpd.nix b/modules/services/mpd.nix index 195af90..8cd3cee 100644 --- a/modules/services/mpd.nix +++ b/modules/services/mpd.nix @@ -4,28 +4,12 @@ pkgs, ... }: let - cfg = config.modules.services.media.mpd; - inherit (config.meta.mainUser) username; - inherit (lib.modules) mkIf; - inherit (lib.types) str; - inherit (lib.options) mkOption mkEnableOption; + cfg = config.modules.usrEnv.services.media.mpd; + inherit (config.modules.other.system) username; + inherit (lib) mkIf; in { - options.modules.services = { - media = { - mpd = { - enable = mkEnableOption "mpd service"; - musicDirectory = mkOption { - description = "music directory for mpd"; - type = str; - default = "/home/${username}/cloud/media/Music"; - }; - }; - }; - }; config = mkIf cfg.enable { - # command line interface to mpd environment.systemPackages = [pkgs.mpc]; - systemd.services.mpd.environment = { # https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/609 XDG_RUNTIME_DIR = "/run/user/1000"; diff --git a/modules/services/tuigreet.nix b/modules/services/tuigreet.nix new file mode 100644 index 0000000..ae1e0db --- /dev/null +++ b/modules/services/tuigreet.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib) mkIf getExe; + cfg = config.modules.usrEnv.services.greetd; +in { + services.greetd = mkIf cfg.enable { + enable = true; + restart = true; + vt = 2; + settings = { + default_session = { + command = '' + ${getExe pkgs.greetd.tuigreet} \ + -c \"Hyprland\" \ + -r + -t --time-format "DD.MM.YYYY" + --asteriks + ''; + }; + }; + }; +} diff --git a/modules/wms/wayland/hyprland/binds.nix b/modules/wms/wayland/hyprland/binds.nix index 6ab9307..799bae6 100644 --- a/modules/wms/wayland/hyprland/binds.nix +++ b/modules/wms/wayland/hyprland/binds.nix @@ -3,7 +3,7 @@ pkgs, ... }: let - cfg = config.modules.desktops.hyprland; + cfg = config.modules.usrEnv.desktops.hyprland; inherit (builtins) map genList toString; in { programs.hyprland.settings = { diff --git a/modules/wms/wayland/hyprland/module.nix b/modules/wms/wayland/hyprland/module.nix index 5b7e289..f9ba8b1 100644 --- a/modules/wms/wayland/hyprland/module.nix +++ b/modules/wms/wayland/hyprland/module.nix @@ -4,11 +4,9 @@ lib, ... }: let - cfg = config.modules.desktops.hyprland; + cfg = config.modules.usrEnv.desktops.hyprland; # inherit (inputs.hyprsplit.packages.${pkgs.system}) hyprsplit; - inherit (lib.modules) mkIf mkDefault; - inherit (lib.options) mkOption; - inherit (lib.types) bool enum package; + inherit (lib) mkIf mkDefault; in { imports = [ ./binds.nix @@ -21,29 +19,6 @@ in { # we disable the default hyprland module disabledModules = ["programs/hyprland.nix"]; - options.modules.desktops.hyprland = { - enable = mkOption { - type = bool; - default = false; - description = '' - Whether to enable Hyprland wayland compositor. - ''; - }; - - package = mkOption { - type = package; - default = pkgs.hyprland; - description = '' - The Hyprland package to be used. - ''; - }; - portalPackage = mkOption { - type = package; - default = pkgs.xdg-desktop-portal-hyprland; - description = "The hyprland portal package"; - }; - }; - config = mkIf cfg.enable { programs.hyprland = { enable = true;