feat(homes): Move graphical nixos config to nixos.nix
This commit is contained in:
parent
b085f92226
commit
0f3694c82d
3 changed files with 231 additions and 221 deletions
|
@ -1,75 +1,9 @@
|
||||||
|
{ lib, inputs, ... }:
|
||||||
{
|
{
|
||||||
lib,
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
cfg = config.flake;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
allowedUnfreePackages = [
|
|
||||||
"stremio-shell"
|
|
||||||
"stremio-server"
|
|
||||||
"steam"
|
|
||||||
"steam-unwrapped"
|
|
||||||
];
|
|
||||||
flake.modules.nixos.graphical =
|
|
||||||
{ config, pkgs, ... }:
|
|
||||||
{
|
|
||||||
fonts.packages = [ pkgs.font-awesome ];
|
|
||||||
services.getty.autologinUser = cfg.admin.username;
|
|
||||||
# Start Hyprland at boot only if not connecting through SSH
|
|
||||||
environment.loginShellInit = # sh
|
|
||||||
''
|
|
||||||
if [[ -z "$SSH_CLIENT" && -z "$SSH_CONNECTION" ]]; then
|
|
||||||
if uwsm check may-start; then
|
|
||||||
exec uwsm start hyprland-uwsm.desktop
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
environment.variables = {
|
|
||||||
# Get Electron apps to use Wayland
|
|
||||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
|
||||||
NIXOS_OZONE_WL = "1";
|
|
||||||
};
|
|
||||||
programs = {
|
|
||||||
hyprland = {
|
|
||||||
enable = true;
|
|
||||||
# Use UWSM to have each process controlled by systemd init
|
|
||||||
withUWSM = true;
|
|
||||||
};
|
|
||||||
steam = {
|
|
||||||
enable = true;
|
|
||||||
gamescopeSession.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
security.pam.services.hyprlock = { };
|
|
||||||
services.sunshine = {
|
|
||||||
enable = true;
|
|
||||||
capSysAdmin = true;
|
|
||||||
openFirewall = true;
|
|
||||||
settings = {
|
|
||||||
sunshine_name = config.networking.hostName;
|
|
||||||
origin_pin_allowed = "wan";
|
|
||||||
origin_web_ui_allowed = "wan";
|
|
||||||
};
|
|
||||||
applications = { };
|
|
||||||
};
|
|
||||||
# spotifyd
|
|
||||||
networking.firewall.allowedTCPPorts = [ 5353 ];
|
|
||||||
networking.firewall.allowedUDPPorts = [ 5353 ];
|
|
||||||
};
|
|
||||||
flake.modules.homeManager.rafiq =
|
flake.modules.homeManager.rafiq =
|
||||||
{
|
{ pkgs, config, ... }:
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
hostName,
|
|
||||||
hostConfig,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (lib.modules) mkMerge mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (builtins) map listToAttrs;
|
inherit (builtins) map listToAttrs;
|
||||||
inherit (lib.lists) findFirstIndex;
|
inherit (lib.lists) findFirstIndex;
|
||||||
inherit (inputs.nur.legacyPackages.${pkgs.stdenv.hostPlatform.system}.repos.rycee) firefox-addons;
|
inherit (inputs.nur.legacyPackages.${pkgs.stdenv.hostPlatform.system}.repos.rycee) firefox-addons;
|
||||||
|
@ -104,41 +38,21 @@ in
|
||||||
targets = {
|
targets = {
|
||||||
firefox.colorTheme.enable = true;
|
firefox.colorTheme.enable = true;
|
||||||
firefox.profileNames = syncedProfiles;
|
firefox.profileNames = syncedProfiles;
|
||||||
waybar.addCss = false;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
persistDirs = [
|
|
||||||
"docs"
|
|
||||||
"repos"
|
|
||||||
"vids"
|
|
||||||
"tmp"
|
|
||||||
".cache/Smart Code ltd/Stremio"
|
|
||||||
".local/share/Smart Code ltd/Stremio"
|
|
||||||
".mozilla/firefox"
|
|
||||||
".tor project"
|
|
||||||
".local/share/Steam"
|
|
||||||
".local/share/PrismLauncher"
|
|
||||||
".config/sunshine"
|
|
||||||
];
|
|
||||||
home = {
|
home = {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
prismlauncher
|
prismlauncher
|
||||||
stremio
|
stremio
|
||||||
tor-browser
|
tor-browser
|
||||||
vlc
|
vlc
|
||||||
wl-clipboard-rs
|
|
||||||
];
|
];
|
||||||
sessionVariables = {
|
sessionVariables = {
|
||||||
BROWSER = "firefox";
|
BROWSER = "firefox";
|
||||||
LAUNCHER = "fuzzel";
|
|
||||||
LOCKSCREEN = "hyprlock";
|
|
||||||
NOTIFICATION_DAEMON = "mako";
|
|
||||||
TERMINAL = "ghostty";
|
TERMINAL = "ghostty";
|
||||||
STATUS_BAR = "waybar";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
programs = {
|
programs = {
|
||||||
fuzzel.enable = true;
|
|
||||||
obs-studio.enable = true;
|
obs-studio.enable = true;
|
||||||
vesktop.enable = true;
|
vesktop.enable = true;
|
||||||
thunderbird.enable = true;
|
thunderbird.enable = true;
|
||||||
|
@ -147,142 +61,12 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
inherit profiles;
|
inherit profiles;
|
||||||
};
|
};
|
||||||
hyprlock = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general.hide_cursor = true;
|
|
||||||
general.ignore_empty_input = true;
|
|
||||||
background.blur_passes = 5;
|
|
||||||
background.blur_size = 5;
|
|
||||||
label = {
|
|
||||||
text = ''hi, $USER.'';
|
|
||||||
font_size = 32;
|
|
||||||
position = "0, 0";
|
|
||||||
halign = "center";
|
|
||||||
valign = "center";
|
|
||||||
zindex = 1;
|
|
||||||
shadow_passes = 5;
|
|
||||||
shadow_size = 5;
|
|
||||||
};
|
|
||||||
input-field = {
|
|
||||||
placeholder_text = "";
|
|
||||||
fade_on_empty = true;
|
|
||||||
size = "200, 45";
|
|
||||||
position = "0, -5%";
|
|
||||||
halign = "center";
|
|
||||||
valign = "center";
|
|
||||||
zindex = 1;
|
|
||||||
shadow_passes = 5;
|
|
||||||
shadow_size = 5;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ghostty = {
|
ghostty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
confirm-close-surface = false;
|
confirm-close-surface = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
waybar = {
|
|
||||||
enable = true;
|
|
||||||
settings = [
|
|
||||||
{
|
|
||||||
layer = "top";
|
|
||||||
modules-left = [
|
|
||||||
"pulseaudio"
|
|
||||||
];
|
|
||||||
modules-right = [
|
|
||||||
"battery"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
"pulseaudio" = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
format-muted = "";
|
|
||||||
format-icons.default = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
on-click = "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
|
||||||
};
|
};
|
||||||
"clock" = {
|
|
||||||
interval = 1;
|
|
||||||
format = "{:%F %T}";
|
|
||||||
};
|
|
||||||
"battery" = {
|
|
||||||
interval = 1;
|
|
||||||
bat-compatibility = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
style = # css
|
|
||||||
''
|
|
||||||
window#waybar {
|
|
||||||
background-color: rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio,
|
|
||||||
#battery,
|
|
||||||
#clock {
|
|
||||||
padding-top: 5px;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
padding-right: 5px;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
services = {
|
|
||||||
spotifyd.enable = true;
|
|
||||||
spotifyd.settings.global = {
|
|
||||||
device_name = "${hostName}";
|
|
||||||
device_type = "computer";
|
|
||||||
zeroconf_port = 5353;
|
|
||||||
};
|
|
||||||
|
|
||||||
mako.enable = true;
|
|
||||||
mako.settings.default-timeout = 10000;
|
|
||||||
|
|
||||||
};
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
# This is needed for UWSM
|
|
||||||
systemd.enable = false;
|
|
||||||
# Null the packages since we use them system wide
|
|
||||||
package = null;
|
|
||||||
portalPackage = null;
|
|
||||||
settings = mkMerge [
|
|
||||||
(import ./_hyprland/decoration.nix)
|
|
||||||
(import ./_hyprland/keybinds.nix { inherit pkgs; })
|
|
||||||
{
|
|
||||||
ecosystem.no_update_news = true;
|
|
||||||
xwayland.force_zero_scaling = true;
|
|
||||||
monitor =
|
|
||||||
let
|
|
||||||
mainMonitor = hostConfig.machine.monitors.main;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
"${mainMonitor.id}, ${mainMonitor.resolution}@${mainMonitor.refresh-rate}, auto, ${mainMonitor.scale}"
|
|
||||||
", preferred, auto, 1"
|
|
||||||
];
|
|
||||||
exec-once = [
|
|
||||||
"uwsm app -- $LOCKSCREEN"
|
|
||||||
"uwsm app -- $NOTIFICATION_DAEMON"
|
|
||||||
"uwsm app -- $STATUS_BAR"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
# xdg.configFile."uwsm/env".text = # sh
|
|
||||||
# ''
|
|
||||||
# # Force apps to scale right with Wayland
|
|
||||||
# export GDK_SCALE=${mainMonitor.scale}
|
|
||||||
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
|
||||||
# '';
|
|
||||||
# xdg.configFile."uwsm/env-hyprland".text = # sh
|
|
||||||
# ''
|
|
||||||
# export GDK_SCALE=${mainMonitor.scale}
|
|
||||||
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
|
||||||
# '';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
226
nix/homes/rafiq/desktop/nixos.nix
Normal file
226
nix/homes/rafiq/desktop/nixos.nix
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.flake;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
allowedUnfreePackages = [
|
||||||
|
"stremio-shell"
|
||||||
|
"stremio-server"
|
||||||
|
"steam"
|
||||||
|
"steam-unwrapped"
|
||||||
|
];
|
||||||
|
flake.modules.nixos.graphical =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
fonts.packages = [ pkgs.font-awesome ];
|
||||||
|
services.getty.autologinUser = cfg.admin.username;
|
||||||
|
# Start Hyprland at boot only if not connecting through SSH
|
||||||
|
environment.loginShellInit = # sh
|
||||||
|
''
|
||||||
|
if [[ -z "$SSH_CLIENT" && -z "$SSH_CONNECTION" ]]; then
|
||||||
|
if uwsm check may-start; then
|
||||||
|
exec uwsm start hyprland-uwsm.desktop
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
environment.variables = {
|
||||||
|
# Get Electron apps to use Wayland
|
||||||
|
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
hyprland = {
|
||||||
|
enable = true;
|
||||||
|
# Use UWSM to have each process controlled by systemd init
|
||||||
|
withUWSM = true;
|
||||||
|
};
|
||||||
|
steam = {
|
||||||
|
enable = true;
|
||||||
|
gamescopeSession.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
security.pam.services.hyprlock = { };
|
||||||
|
services.sunshine = {
|
||||||
|
enable = true;
|
||||||
|
capSysAdmin = true;
|
||||||
|
openFirewall = true;
|
||||||
|
settings = {
|
||||||
|
sunshine_name = config.networking.hostName;
|
||||||
|
origin_pin_allowed = "wan";
|
||||||
|
origin_web_ui_allowed = "wan";
|
||||||
|
};
|
||||||
|
applications = { };
|
||||||
|
};
|
||||||
|
# spotifyd
|
||||||
|
networking.firewall.allowedTCPPorts = [ 5353 ];
|
||||||
|
networking.firewall.allowedUDPPorts = [ 5353 ];
|
||||||
|
};
|
||||||
|
flake.modules.homeManager.rafiq =
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
hostName,
|
||||||
|
hostConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib.modules) mkMerge mkIf;
|
||||||
|
in
|
||||||
|
mkIf (config.graphical && pkgs.system == "x86_64-linux") {
|
||||||
|
stylix.targets.waybar.addCss = false;
|
||||||
|
persistDirs = [
|
||||||
|
"docs"
|
||||||
|
"repos"
|
||||||
|
"vids"
|
||||||
|
"tmp"
|
||||||
|
".cache/Smart Code ltd/Stremio"
|
||||||
|
".local/share/Smart Code ltd/Stremio"
|
||||||
|
".mozilla/firefox"
|
||||||
|
".tor project"
|
||||||
|
".local/share/Steam"
|
||||||
|
".local/share/PrismLauncher"
|
||||||
|
".config/sunshine"
|
||||||
|
];
|
||||||
|
home = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
wl-clipboard-rs
|
||||||
|
];
|
||||||
|
sessionVariables = {
|
||||||
|
LAUNCHER = "fuzzel";
|
||||||
|
LOCKSCREEN = "hyprlock";
|
||||||
|
NOTIFICATION_DAEMON = "mako";
|
||||||
|
STATUS_BAR = "waybar";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# xdg.configFile."uwsm/env".text = # sh
|
||||||
|
# ''
|
||||||
|
# # Force apps to scale right with Wayland
|
||||||
|
# export GDK_SCALE=${mainMonitor.scale}
|
||||||
|
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
||||||
|
# '';
|
||||||
|
# xdg.configFile."uwsm/env-hyprland".text = # sh
|
||||||
|
# ''
|
||||||
|
# export GDK_SCALE=${mainMonitor.scale}
|
||||||
|
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
||||||
|
# '';
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
# This is needed for UWSM
|
||||||
|
systemd.enable = false;
|
||||||
|
# Null the packages since we use them system wide
|
||||||
|
package = null;
|
||||||
|
portalPackage = null;
|
||||||
|
settings = mkMerge [
|
||||||
|
(import ./_hyprland/decoration.nix)
|
||||||
|
(import ./_hyprland/keybinds.nix { inherit pkgs; })
|
||||||
|
{
|
||||||
|
ecosystem.no_update_news = true;
|
||||||
|
xwayland.force_zero_scaling = true;
|
||||||
|
monitor =
|
||||||
|
let
|
||||||
|
mainMonitor = hostConfig.machine.monitors.main;
|
||||||
|
in
|
||||||
|
[
|
||||||
|
"${mainMonitor.id}, ${mainMonitor.resolution}@${mainMonitor.refresh-rate}, auto, ${mainMonitor.scale}"
|
||||||
|
", preferred, auto, 1"
|
||||||
|
];
|
||||||
|
exec-once = [
|
||||||
|
"uwsm app -- $LOCKSCREEN"
|
||||||
|
"uwsm app -- $NOTIFICATION_DAEMON"
|
||||||
|
"uwsm app -- $STATUS_BAR"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
spotifyd.enable = true;
|
||||||
|
spotifyd.settings.global = {
|
||||||
|
device_name = "${hostName}";
|
||||||
|
device_type = "computer";
|
||||||
|
zeroconf_port = 5353;
|
||||||
|
};
|
||||||
|
mako.enable = true;
|
||||||
|
mako.settings.default-timeout = 10000;
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
fuzzel.enable = true;
|
||||||
|
waybar = {
|
||||||
|
enable = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
layer = "top";
|
||||||
|
modules-left = [
|
||||||
|
"pulseaudio"
|
||||||
|
];
|
||||||
|
modules-right = [
|
||||||
|
"battery"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
"pulseaudio" = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
format-muted = "";
|
||||||
|
format-icons.default = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
on-click = "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||||
|
};
|
||||||
|
"clock" = {
|
||||||
|
interval = 1;
|
||||||
|
format = "{:%F %T}";
|
||||||
|
};
|
||||||
|
"battery" = {
|
||||||
|
interval = 1;
|
||||||
|
bat-compatibility = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
style = # css
|
||||||
|
''
|
||||||
|
window#waybar {
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio,
|
||||||
|
#battery,
|
||||||
|
#clock {
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
hyprlock = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general.hide_cursor = true;
|
||||||
|
general.ignore_empty_input = true;
|
||||||
|
background.blur_passes = 5;
|
||||||
|
background.blur_size = 5;
|
||||||
|
label = {
|
||||||
|
text = ''hi, $USER.'';
|
||||||
|
font_size = 32;
|
||||||
|
position = "0, 0";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
zindex = 1;
|
||||||
|
shadow_passes = 5;
|
||||||
|
shadow_size = 5;
|
||||||
|
};
|
||||||
|
input-field = {
|
||||||
|
placeholder_text = "";
|
||||||
|
fade_on_empty = true;
|
||||||
|
size = "200, 45";
|
||||||
|
position = "0, -5%";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
zindex = 1;
|
||||||
|
shadow_passes = 5;
|
||||||
|
shadow_size = 5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -50,12 +50,12 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
flake.modules.homeManager.default =
|
flake.modules.homeManager.default =
|
||||||
{ config, osConfig, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
imports = [ inputs.impermanence.homeManagerModules.impermanence ];
|
imports = [ inputs.impermanence.homeManagerModules.impermanence ];
|
||||||
options.persistDirs = mkOpts "directory" { };
|
options.persistDirs = mkOpts "directory" { };
|
||||||
options.persistFiles = mkOpts "file" { };
|
options.persistFiles = mkOpts "file" { };
|
||||||
config = mkIf (osConfig.nixpkgs.hostPlatform == "x86_64-linux") {
|
config = mkIf (pkgs.system == "x86_64-linux") {
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
home.persistence."/persist${config.home.homeDirectory}" = {
|
||||||
allowOther = true;
|
allowOther = true;
|
||||||
directories = config.persistDirs;
|
directories = config.persistDirs;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue