feat: create new home/ directory structure for profile-based config
New structure:
- home/base/ - Always loaded (shell, cli-tools, secrets)
- home/coding/ - Profile-independent dev tooling (editor, lsp, git, agents)
- home/profiles/ - Freely combinable profiles (gaming, media)
- home/desktop/ - Desktop-only (wm, apps, theme)
- home/server/ - Minimal server stub
Migration sources:
- home/features/cli/ → home/base/{shell,cli-tools,secrets}
- home/features/desktop/hyprland,wayland,rofi → home/desktop/wm/
- home/features/desktop/obsidian,office,webapps,crypto → home/desktop/apps/
- home/features/desktop/fonts,theme,wallpapers → home/desktop/theme/
- gaming.nix split → home/profiles/gaming/{steam,gamescope}
- media.nix split → home/profiles/media/{obs,ffmpeg,yt-dlp,kdenlive,handbrake}
Option namespaces updated:
- features.cli.* → base.shell.* / base.cliTools.* / base.secrets
- features.desktop.* → desktop.wm.* / desktop.apps.* / desktop.theme.*
- features.desktop.gaming → profiles.gaming.*
- features.desktop.media → profiles.media.*
Verified: nix flake check passes (warnings only)
This commit is contained in:
10
home/profiles/media/default.nix
Normal file
10
home/profiles/media/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
# Media profile aggregator — OBS, FFmpeg, yt-dlp, Kdenlive, and HandBrake.
|
||||
{...}: {
|
||||
imports = [
|
||||
./obs.nix
|
||||
./ffmpeg.nix
|
||||
./yt-dlp.nix
|
||||
./kdenlive.nix
|
||||
./handbrake.nix
|
||||
];
|
||||
}
|
||||
24
home/profiles/media/ffmpeg.nix
Normal file
24
home/profiles/media/ffmpeg.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
# FFmpeg — full-featured multimedia processing toolchain.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.profiles.media.ffmpeg;
|
||||
in {
|
||||
options.profiles.media.ffmpeg.enable = mkEnableOption "enable FFmpeg tools";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
amf
|
||||
ffmpeg_6-full
|
||||
gst_all_1.gstreamer
|
||||
gst_all_1.gst-vaapi
|
||||
pamixer
|
||||
pavucontrol
|
||||
qpwgraph
|
||||
];
|
||||
};
|
||||
}
|
||||
21
home/profiles/media/handbrake.nix
Normal file
21
home/profiles/media/handbrake.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
# HandBrake — open-source video transcoder.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.profiles.media.handbrake;
|
||||
in {
|
||||
options.profiles.media.handbrake.enable = mkEnableOption "enable HandBrake transcoder";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
handbrake
|
||||
gimp
|
||||
inkscape
|
||||
libation
|
||||
];
|
||||
};
|
||||
}
|
||||
16
home/profiles/media/kdenlive.nix
Normal file
16
home/profiles/media/kdenlive.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
# Kdenlive — KDE non-linear video editor.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.profiles.media.kdenlive;
|
||||
in {
|
||||
options.profiles.media.kdenlive.enable = mkEnableOption "enable Kdenlive video editor";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [pkgs.kdePackages.kdenlive];
|
||||
};
|
||||
}
|
||||
21
home/profiles/media/obs.nix
Normal file
21
home/profiles/media/obs.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
# OBS Studio — open broadcaster software for streaming and recording.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.profiles.media.obs;
|
||||
in {
|
||||
options.profiles.media.obs.enable = mkEnableOption "enable OBS Studio";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
v4l-utils
|
||||
];
|
||||
|
||||
# OBS is managed via NixOS programs.obs-studio at the system level.
|
||||
# Home-manager only installs supporting tools.
|
||||
};
|
||||
}
|
||||
31
home/profiles/media/yt-dlp.nix
Normal file
31
home/profiles/media/yt-dlp.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
# yt-dlp and media playback — YouTube downloader with MPV integration.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.profiles.media.ytDlp;
|
||||
in {
|
||||
options.profiles.media.ytDlp.enable = mkEnableOption "enable yt-dlp and media playback";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
plexamp
|
||||
webcord
|
||||
];
|
||||
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
bindings = {
|
||||
WHEEL_UP = "seek 10";
|
||||
WHEEL_DOWN = "seek -10";
|
||||
};
|
||||
config = {
|
||||
profile = "gpu-hq";
|
||||
ytdl-format = "bestvideo+bestaudio";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user