mirror of
https://github.com/aviallon/nixos-lib.git
synced 2026-04-06 01:38:06 +00:00
[Desktop] Refactor configuration
This commit is contained in:
parent
cff1f34d05
commit
b9dbcfd715
8 changed files with 277 additions and 247 deletions
|
|
@ -4,7 +4,7 @@
|
||||||
./general.nix
|
./general.nix
|
||||||
./nix.nix
|
./nix.nix
|
||||||
./boot.nix
|
./boot.nix
|
||||||
./desktop.nix
|
./desktop
|
||||||
./home-manager.nix
|
./home-manager.nix
|
||||||
./network.nix
|
./network.nix
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
|
|
||||||
241
desktop.nix
241
desktop.nix
|
|
@ -1,241 +0,0 @@
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.aviallon.desktop;
|
|
||||||
generalCfg = config.aviallon.general;
|
|
||||||
filterConfig = pkgs.callPackage ./packages/pipewire-noise-filter.cfg.nix {
|
|
||||||
noiseFilterStrength = cfg.audio.noise-filter.strength;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
options.aviallon.desktop = {
|
|
||||||
enable = mkOption {
|
|
||||||
default = true;
|
|
||||||
example = false;
|
|
||||||
type = types.bool;
|
|
||||||
description = "Enable desktop related configuration";
|
|
||||||
};
|
|
||||||
layout = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "fr";
|
|
||||||
example = "us";
|
|
||||||
description = "Default keyboard layout for X and console";
|
|
||||||
};
|
|
||||||
audio = {
|
|
||||||
noise-filter.strength = mkOption {
|
|
||||||
description = "Noise reduction strength (from 0 to 100)";
|
|
||||||
type = types.float;
|
|
||||||
default = 80.0;
|
|
||||||
example = 0.0;
|
|
||||||
};
|
|
||||||
noise-filter.enable = mkOption {
|
|
||||||
description = "Wether to enable noise filter at all";
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
example = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
graphics = {
|
|
||||||
shaderCache = {
|
|
||||||
path = mkOption {
|
|
||||||
description = "Where to put shader cache (currently only for NVidia)";
|
|
||||||
type = types.path;
|
|
||||||
default = "/var/tmp/shadercache";
|
|
||||||
example = "/tmp/shadercache";
|
|
||||||
};
|
|
||||||
cleanupInterval = mkOption {
|
|
||||||
description = "Interval for cache cleanup (tmpfiles.d format). Set to '-' to disable.";
|
|
||||||
type = types.str;
|
|
||||||
default = "180d";
|
|
||||||
example = "-";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
./desktop
|
|
||||||
];
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
|
|
||||||
aviallon.network.backend = mkDefault "NetworkManager";
|
|
||||||
|
|
||||||
aviallon.boot.kernel = pkgs.linuxKernel.kernels.linux_xanmod;
|
|
||||||
|
|
||||||
# Enable the X11 windowing system.
|
|
||||||
services.xserver.enable = true;
|
|
||||||
# services.xserver.tty = mkOverride 70 1;
|
|
||||||
|
|
||||||
systemd.services."getty@tty1".enable = mkOverride 50 false;
|
|
||||||
systemd.services."autovt@tty1".enable = mkOverride 50 false;
|
|
||||||
|
|
||||||
# Configure keymap in X11
|
|
||||||
services.xserver.layout = cfg.layout;
|
|
||||||
services.xserver.xkbOptions = "eurosign:e";
|
|
||||||
|
|
||||||
|
|
||||||
boot.plymouth.enable = mkDefault (!generalCfg.minimal);
|
|
||||||
aviallon.boot.cmdline = {
|
|
||||||
splash = mkIf (!generalCfg.debug) "";
|
|
||||||
"udev.log_level" = mkIf (!generalCfg.debug) 3;
|
|
||||||
preempt = "full";
|
|
||||||
reboot = mkDefault "warm";
|
|
||||||
"usbhid.mousepoll" = 1; # 1ms latency for mouse
|
|
||||||
"usbhid.kbpoll" = 4; # 4ms latency for kb
|
|
||||||
"intel_pstate" = "passive";
|
|
||||||
};
|
|
||||||
boot.initrd.verbose = generalCfg.debug;
|
|
||||||
boot.consoleLogLevel = mkIf (!generalCfg.debug) 1;
|
|
||||||
|
|
||||||
console.earlySetup = true; # Prettier console
|
|
||||||
fonts.enableDefaultFonts = mkIf (!generalCfg.minimal) true;
|
|
||||||
|
|
||||||
hardware.acpilight.enable = mkIf (!generalCfg.minimal) true;
|
|
||||||
hardware.opentabletdriver.enable = mkIf (!generalCfg.minimal) true;
|
|
||||||
|
|
||||||
hardware.bluetooth = mkIf (!generalCfg.minimal) {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.bluezFull;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
# Enable sound.
|
|
||||||
sound.enable = false;
|
|
||||||
services.pipewire = mkIf (!generalCfg.minimal) {
|
|
||||||
enable = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
jack.enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = mkDefault true;
|
|
||||||
wireplumber.enable = true;
|
|
||||||
config.pipewire-pulse = {
|
|
||||||
"context.exec" = [
|
|
||||||
{ path = "pactl"; args = ''load-module module-combine-sink sink_name="Sorties combinées"''; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
environment.etc = {
|
|
||||||
"wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
|
|
||||||
bluez_monitor.properties = {
|
|
||||||
["bluez5.enable-sbc-xq"] = true,
|
|
||||||
["bluez5.enable-msbc"] = true,
|
|
||||||
["bluez5.enable-hw-volume"] = true,
|
|
||||||
["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
security.rtkit.enable = true; # Real-time support for pipewire
|
|
||||||
|
|
||||||
security.polkit.enable = true; # Better interactive privilege prompts
|
|
||||||
|
|
||||||
# Enable running X11 apps on Wayland
|
|
||||||
programs.xwayland.enable = true;
|
|
||||||
|
|
||||||
# Hardware-agnostic audio denoising
|
|
||||||
systemd.user.services.pipewire-noise-filter = mkIf cfg.audio.noise-filter.enable {
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = [
|
|
||||||
"${pkgs.pipewire}/bin/pipewire -c ${filterConfig}"
|
|
||||||
];
|
|
||||||
Type = "simple";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
bindsTo = [ "pipewire.service" ];
|
|
||||||
after = [ "pipewire.service" ];
|
|
||||||
environment = {
|
|
||||||
PIPEWIRE_DEBUG = "3";
|
|
||||||
};
|
|
||||||
enable = cfg.audio.noise-filter.strength > 0.0;
|
|
||||||
wantedBy = [ "pipewire.service" ];
|
|
||||||
description = "Pipewire Noise Filter";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
|
||||||
services.xserver.libinput.enable = true;
|
|
||||||
|
|
||||||
hardware.opengl.driSupport = true;
|
|
||||||
# For 32 bit applications
|
|
||||||
hardware.opengl.driSupport32Bit = mkIf (!generalCfg.minimal) (mkDefault true);
|
|
||||||
|
|
||||||
# programs.gnupg.agent.pinentryFlavor = "qt";
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
chromium
|
|
||||||
p7zip
|
|
||||||
]
|
|
||||||
++ (optionals (!generalCfg.minimal) [
|
|
||||||
glxinfo
|
|
||||||
vdpauinfo
|
|
||||||
libva-utils
|
|
||||||
myFirefox
|
|
||||||
spotify
|
|
||||||
nextcloud-client
|
|
||||||
libreoffice-fresh
|
|
||||||
tdesktop
|
|
||||||
vlc
|
|
||||||
]);
|
|
||||||
|
|
||||||
programs.chromium = {
|
|
||||||
enable = true;
|
|
||||||
# https://docs.microsoft.com/en-us/microsoft-edge/extensions-chromium/enterprise/auto-update
|
|
||||||
# https://clients2.google.com/service/update2/crx?x=id%3D{extension_id}%26v%3D{extension_version}
|
|
||||||
extensions = [
|
|
||||||
# "gcbommkclmclpchllfjekcdonpmejbdp;https://clients2.google.com/service/update2/crx" # HTTPS Everywhere
|
|
||||||
"mleijjdpceldbelpnpkddofmcmcaknm" # Smart HTTPS
|
|
||||||
"cjpalhdlnbpafiamejdnhcphjbkeiagm;https://clients2.google.com/service/update2/crx" # Ublock Origin
|
|
||||||
"fihnjjcciajhdojfnbdddfaoknhalnja" # I don't care about cookies
|
|
||||||
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # Dark Reader
|
|
||||||
];
|
|
||||||
extraOpts = {
|
|
||||||
"PlatformHEVCDecoderSupport" = true;
|
|
||||||
"BrowserSignin" = 0;
|
|
||||||
"SyncDisabled" = true;
|
|
||||||
"PasswordManagerEnabled" = true;
|
|
||||||
"SpellcheckEnabled" = true;
|
|
||||||
"SpellcheckLanguage" = [
|
|
||||||
"fr"
|
|
||||||
"en-US"
|
|
||||||
];
|
|
||||||
"DefaultSearchProviderEnabled" = true;
|
|
||||||
"DefaultSearchProviderKeyword" = "duckduckgo";
|
|
||||||
"DefaultSearchProviderName" = "DuckDuckGo";
|
|
||||||
"ExtensionInstallSources" = [
|
|
||||||
"https://chrome.google.com/webstore/*"
|
|
||||||
"https://microsoftedge.microsoft.com/addons/*"
|
|
||||||
"https://gitlab.com/magnolia1234/bypass-paywalls-chrome-clean/*"
|
|
||||||
];
|
|
||||||
"BuiltInDnsClientEnabled" = false;
|
|
||||||
"TranslateEnabled" = false;
|
|
||||||
"PasswordLeakDetectionEnabled" = false;
|
|
||||||
"CloudPrintProxyEnabled" = false;
|
|
||||||
"CloudPrintSubmitEnabled" = false;
|
|
||||||
"SafeBrowsingProtectionLevel" = 0; # Force disabled
|
|
||||||
};
|
|
||||||
defaultSearchProviderSearchURL = ''https://duckduckgo.com/?kp=1&k1=-1&kav=1&kak=-1&kax=-1&kaq=-1&kap=-1&kau=-1&kao=-1&kae=d&q={searchTerms}'';
|
|
||||||
defaultSearchProviderSuggestURL = ''https://ac.duckduckgo.com/ac/?q={searchTerms}'';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
aviallon.programs.allowUnfreeList = [
|
|
||||||
"spotify"
|
|
||||||
"spotify-unwrapped"
|
|
||||||
|
|
||||||
"steam" "steam-original" "steam-runtime" "steam-run"
|
|
||||||
];
|
|
||||||
|
|
||||||
services.packagekit.enable = mkDefault (!generalCfg.minimal);
|
|
||||||
security.sudo.extraConfig =
|
|
||||||
''
|
|
||||||
# Keep X-related variables for better GUI integration
|
|
||||||
Defaults:root,%wheel env_keep+=XAUTHORITY
|
|
||||||
Defaults:root,%wheel env_keep+=DISPLAY
|
|
||||||
''
|
|
||||||
;
|
|
||||||
|
|
||||||
networking.networkmanager = {
|
|
||||||
plugins = []
|
|
||||||
++ optional (!generalCfg.minimal) pkgs.networkmanager-openvpn
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
54
desktop/browser.nix
Normal file
54
desktop/browser.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.aviallon.desktop;
|
||||||
|
generalCfg = config.aviallon.general;
|
||||||
|
in {
|
||||||
|
config = mkIf (cfg.enable && !generalCfg.minimal) {
|
||||||
|
environment.systemPackages = with pkgs; []
|
||||||
|
++ optionals (!generalCfg.minimal) [
|
||||||
|
chromium
|
||||||
|
myFirefox
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.chromium = {
|
||||||
|
enable = true;
|
||||||
|
# https://docs.microsoft.com/en-us/microsoft-edge/extensions-chromium/enterprise/auto-update
|
||||||
|
# https://clients2.google.com/service/update2/crx?x=id%3D{extension_id}%26v%3D{extension_version}
|
||||||
|
extensions = [
|
||||||
|
# "gcbommkclmclpchllfjekcdonpmejbdp;https://clients2.google.com/service/update2/crx" # HTTPS Everywhere
|
||||||
|
"mleijjdpceldbelpnpkddofmcmcaknm" # Smart HTTPS
|
||||||
|
"cjpalhdlnbpafiamejdnhcphjbkeiagm;https://clients2.google.com/service/update2/crx" # Ublock Origin
|
||||||
|
"fihnjjcciajhdojfnbdddfaoknhalnja" # I don't care about cookies
|
||||||
|
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # Dark Reader
|
||||||
|
];
|
||||||
|
extraOpts = {
|
||||||
|
"PlatformHEVCDecoderSupport" = true;
|
||||||
|
"BrowserSignin" = 0;
|
||||||
|
"SyncDisabled" = true;
|
||||||
|
"PasswordManagerEnabled" = true;
|
||||||
|
"SpellcheckEnabled" = true;
|
||||||
|
"SpellcheckLanguage" = [
|
||||||
|
"fr"
|
||||||
|
"en-US"
|
||||||
|
];
|
||||||
|
"DefaultSearchProviderEnabled" = true;
|
||||||
|
"DefaultSearchProviderKeyword" = "duckduckgo";
|
||||||
|
"DefaultSearchProviderName" = "DuckDuckGo";
|
||||||
|
"ExtensionInstallSources" = [
|
||||||
|
"https://chrome.google.com/webstore/*"
|
||||||
|
"https://microsoftedge.microsoft.com/addons/*"
|
||||||
|
"https://gitlab.com/magnolia1234/bypass-paywalls-chrome-clean/*" # */
|
||||||
|
];
|
||||||
|
"BuiltInDnsClientEnabled" = false;
|
||||||
|
"TranslateEnabled" = false;
|
||||||
|
"PasswordLeakDetectionEnabled" = false;
|
||||||
|
"CloudPrintProxyEnabled" = false;
|
||||||
|
"CloudPrintSubmitEnabled" = false;
|
||||||
|
"SafeBrowsingProtectionLevel" = 0; # Force disabled
|
||||||
|
};
|
||||||
|
defaultSearchProviderSearchURL = ''https://duckduckgo.com/?kp=1&k1=-1&kav=1&kak=-1&kax=-1&kaq=-1&kap=-1&kau=-1&kao=-1&kae=d&q={searchTerms}'';
|
||||||
|
defaultSearchProviderSuggestURL = ''https://ac.duckduckgo.com/ac/?q={searchTerms}'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -2,9 +2,11 @@
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./general.nix
|
||||||
./developer.nix
|
./developer.nix
|
||||||
./multimedia.nix
|
./multimedia.nix
|
||||||
./plasma.nix
|
./plasma.nix
|
||||||
./games.nix
|
./games.nix
|
||||||
|
./browser.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,11 @@ in {
|
||||||
"MESA_GLSL_CACHE_DIR" = cfg.graphics.shaderCache.path + "/mesa";
|
"MESA_GLSL_CACHE_DIR" = cfg.graphics.shaderCache.path + "/mesa";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
aviallon.programs.allowUnfreeList = [
|
||||||
|
"steam" "steam-original" "steam-runtime" "steam-run"
|
||||||
|
];
|
||||||
|
|
||||||
systemd.tmpfiles.rules = [
|
systemd.tmpfiles.rules = [
|
||||||
(mkTmpDir (cfg.graphics.shaderCache.path + "/nvidia") cfg.graphics.shaderCache.cleanupInterval)
|
(mkTmpDir (cfg.graphics.shaderCache.path + "/nvidia") cfg.graphics.shaderCache.cleanupInterval)
|
||||||
(mkTmpDir (cfg.graphics.shaderCache.path + "/mesa") cfg.graphics.shaderCache.cleanupInterval)
|
(mkTmpDir (cfg.graphics.shaderCache.path + "/mesa") cfg.graphics.shaderCache.cleanupInterval)
|
||||||
|
|
|
||||||
154
desktop/general.nix
Normal file
154
desktop/general.nix
Normal file
|
|
@ -0,0 +1,154 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.aviallon.desktop;
|
||||||
|
generalCfg = config.aviallon.general;
|
||||||
|
filterConfig = pkgs.callPackage ./pipewire-noise-filter.cfg.nix {
|
||||||
|
noiseFilterStrength = cfg.audio.noise-filter.strength;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.aviallon.desktop = {
|
||||||
|
enable = mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = "Enable desktop related configuration";
|
||||||
|
};
|
||||||
|
environment = mkOption {
|
||||||
|
default = "plasma";
|
||||||
|
example = "gnome";
|
||||||
|
type = with types; enum [ "plasma" "gnome" ];
|
||||||
|
description = "What Desktop Environment to use";
|
||||||
|
};
|
||||||
|
layout = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "fr";
|
||||||
|
example = "us";
|
||||||
|
description = "Default keyboard layout for X and console";
|
||||||
|
};
|
||||||
|
audio = {
|
||||||
|
noise-filter.strength = mkOption {
|
||||||
|
description = "Noise reduction strength (from 0 to 100)";
|
||||||
|
type = types.float;
|
||||||
|
default = 80.0;
|
||||||
|
example = 0.0;
|
||||||
|
};
|
||||||
|
noise-filter.enable = mkOption {
|
||||||
|
description = "Wether to enable noise filter at all";
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
graphics = {
|
||||||
|
shaderCache = {
|
||||||
|
path = mkOption {
|
||||||
|
description = "Where to put shader cache (currently only for NVidia)";
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/tmp/shadercache";
|
||||||
|
example = "/tmp/shadercache";
|
||||||
|
};
|
||||||
|
cleanupInterval = mkOption {
|
||||||
|
description = "Interval for cache cleanup (tmpfiles.d format). Set to '-' to disable.";
|
||||||
|
type = types.str;
|
||||||
|
default = "180d";
|
||||||
|
example = "-";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
aviallon.network.backend = mkDefault "NetworkManager";
|
||||||
|
|
||||||
|
aviallon.boot.kernel = pkgs.linuxKernel.kernels.linux_xanmod;
|
||||||
|
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
services.xserver.enable = true;
|
||||||
|
# services.xserver.tty = mkOverride 70 1;
|
||||||
|
|
||||||
|
systemd.services."getty@tty1".enable = mkOverride 50 false;
|
||||||
|
systemd.services."autovt@tty1".enable = mkOverride 50 false;
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
services.xserver.layout = cfg.layout;
|
||||||
|
services.xserver.xkbOptions = "eurosign:e";
|
||||||
|
|
||||||
|
|
||||||
|
boot.plymouth.enable = mkDefault (!generalCfg.minimal);
|
||||||
|
aviallon.boot.cmdline = {
|
||||||
|
splash = mkIf (!generalCfg.debug) "";
|
||||||
|
"udev.log_level" = mkIf (!generalCfg.debug) 3;
|
||||||
|
preempt = "full";
|
||||||
|
"usbhid.mousepoll" = 1; # 1ms latency for mouse
|
||||||
|
"usbhid.kbpoll" = 4; # 4ms latency for kb
|
||||||
|
};
|
||||||
|
boot.initrd.verbose = generalCfg.debug;
|
||||||
|
boot.consoleLogLevel = mkIf (!generalCfg.debug) 1;
|
||||||
|
|
||||||
|
console.earlySetup = true; # Prettier console
|
||||||
|
fonts.enableDefaultFonts = mkIf (!generalCfg.minimal) true;
|
||||||
|
|
||||||
|
hardware.acpilight.enable = mkIf (!generalCfg.minimal) true;
|
||||||
|
hardware.opentabletdriver.enable = mkIf (!generalCfg.minimal) true;
|
||||||
|
|
||||||
|
hardware.bluetooth = mkIf (!generalCfg.minimal) {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.bluezFull;
|
||||||
|
};
|
||||||
|
|
||||||
|
security.polkit.enable = true; # Better interactive privilege prompts
|
||||||
|
|
||||||
|
# Enable running X11 apps on Wayland
|
||||||
|
programs.xwayland.enable = true;
|
||||||
|
|
||||||
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
|
services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
hardware.opengl.driSupport = true;
|
||||||
|
# For 32 bit applications
|
||||||
|
hardware.opengl.driSupport32Bit = mkIf (!generalCfg.minimal) (mkDefault true);
|
||||||
|
|
||||||
|
# programs.gnupg.agent.pinentryFlavor = "qt";
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; []
|
||||||
|
++ [
|
||||||
|
p7zip
|
||||||
|
]
|
||||||
|
++ optionals (!generalCfg.minimal) [
|
||||||
|
glxinfo
|
||||||
|
vdpauinfo
|
||||||
|
libva-utils
|
||||||
|
spotify
|
||||||
|
nextcloud-client
|
||||||
|
libreoffice-fresh
|
||||||
|
tdesktop
|
||||||
|
vlc
|
||||||
|
veracrypt
|
||||||
|
]
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
aviallon.programs.allowUnfreeList = [
|
||||||
|
"spotify" "spotify-unwrapped"
|
||||||
|
|
||||||
|
"veracrypt"
|
||||||
|
];
|
||||||
|
|
||||||
|
services.packagekit.enable = mkDefault (!generalCfg.minimal);
|
||||||
|
security.sudo.extraConfig =
|
||||||
|
''
|
||||||
|
# Keep X-related variables for better GUI integration
|
||||||
|
Defaults:root,%wheel env_keep+=XAUTHORITY
|
||||||
|
Defaults:root,%wheel env_keep+=DISPLAY
|
||||||
|
''
|
||||||
|
;
|
||||||
|
|
||||||
|
networking.networkmanager = {
|
||||||
|
plugins = []
|
||||||
|
++ optional (!generalCfg.minimal) pkgs.networkmanager-openvpn
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -2,8 +2,12 @@
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.aviallon.desktop;
|
cfg = config.aviallon.desktop;
|
||||||
|
generalCfg = config.aviallon.general;
|
||||||
|
filterConfig = pkgs.callPackage ./pipewire-noise-filter.cfg.nix {
|
||||||
|
noiseFilterStrength = cfg.audio.noise-filter.strength;
|
||||||
|
};
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf (cfg.enable && !generalCfg.minimal) {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
krita
|
krita
|
||||||
|
|
@ -12,7 +16,62 @@ in {
|
||||||
yt-dlp
|
yt-dlp
|
||||||
jellyfin-media-player
|
jellyfin-media-player
|
||||||
|
|
||||||
|
jamesdsp # Audio post-processing
|
||||||
|
|
||||||
nur.repos.wolfangaukang.vdhcoapp
|
nur.repos.wolfangaukang.vdhcoapp
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
# Enable sound.
|
||||||
|
sound.enable = mkOverride 40 false;
|
||||||
|
hardware.pulseaudio.enable = mkOverride 40 false;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = mkDefault true;
|
||||||
|
wireplumber.enable = true;
|
||||||
|
config.pipewire-pulse = {
|
||||||
|
"context.exec" = [
|
||||||
|
{ path = "pactl"; args = ''load-module module-combine-sink sink_name="Sorties combinées"''; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
environment.etc = {
|
||||||
|
"wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
|
||||||
|
bluez_monitor.properties = {
|
||||||
|
["bluez5.enable-sbc-xq"] = true,
|
||||||
|
["bluez5.enable-msbc"] = true,
|
||||||
|
["bluez5.enable-hw-volume"] = true,
|
||||||
|
["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
security.rtkit.enable = true; # Real-time support for pipewire
|
||||||
|
|
||||||
|
|
||||||
|
# Hardware-agnostic audio denoising
|
||||||
|
systemd.user.services.pipewire-noise-filter = mkIf cfg.audio.noise-filter.enable {
|
||||||
|
unitConfig = {
|
||||||
|
Slice = "session.slice";
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = [
|
||||||
|
"${pkgs.pipewire}/bin/pipewire -c ${filterConfig}"
|
||||||
|
];
|
||||||
|
Type = "simple";
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
|
bindsTo = [ "pipewire.service" ];
|
||||||
|
after = [ "pipewire.service" ];
|
||||||
|
environment = {
|
||||||
|
PIPEWIRE_DEBUG = "3";
|
||||||
|
};
|
||||||
|
enable = cfg.audio.noise-filter.strength > 0.0;
|
||||||
|
wantedBy = [ "pipewire.service" ];
|
||||||
|
description = "Pipewire Noise Filter";
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,7 @@ context.spa-libs = {
|
||||||
context.modules = [
|
context.modules = [
|
||||||
{ name = libpipewire-module-rtkit
|
{ name = libpipewire-module-rtkit
|
||||||
args = {
|
args = {
|
||||||
#nice.level = -11
|
nice.level = -11
|
||||||
#rt.prio = 88
|
|
||||||
#rt.time.soft = 200000
|
|
||||||
#rt.time.hard = 200000
|
|
||||||
}
|
}
|
||||||
flags = [ ifexists nofail ]
|
flags = [ ifexists nofail ]
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue