desktop is building I guess, idk, need to start commiting stuff eventually lmao
14
checks/pre-commit-hooks/default.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (inputs) git-hooks-nix;
|
||||||
|
in
|
||||||
|
git-hooks-nix.lib.${pkgs.system}.run {
|
||||||
|
src = ../..;
|
||||||
|
hooks = {
|
||||||
|
pre-commit-hook-ensure-sops.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
78
flake.lock
generated
@@ -240,6 +240,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat_5": {
|
"flake-compat_5": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696426674,
|
||||||
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat_6": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1650374568,
|
"lastModified": 1650374568,
|
||||||
@@ -441,6 +457,27 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gitignore_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"pre-commit-hooks-nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -948,6 +985,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_13": {
|
"nixpkgs_13": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730768919,
|
||||||
|
"narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_14": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744868846,
|
"lastModified": 1744868846,
|
||||||
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
|
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
|
||||||
@@ -1117,6 +1170,26 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pre-commit-hooks-nix_2": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat_5",
|
||||||
|
"gitignore": "gitignore_2",
|
||||||
|
"nixpkgs": "nixpkgs_13"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1750779888,
|
||||||
|
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"pyproject-build-systems": {
|
"pyproject-build-systems": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -1189,6 +1262,7 @@
|
|||||||
"nixos-raspberrypi": "nixos-raspberrypi",
|
"nixos-raspberrypi": "nixos-raspberrypi",
|
||||||
"nixpkgs": "nixpkgs_12",
|
"nixpkgs": "nixpkgs_12",
|
||||||
"nixpkgs-stable": "nixpkgs-stable_3",
|
"nixpkgs-stable": "nixpkgs-stable_3",
|
||||||
|
"pre-commit-hooks-nix": "pre-commit-hooks-nix_2",
|
||||||
"snowfall-lib": "snowfall-lib",
|
"snowfall-lib": "snowfall-lib",
|
||||||
"sops-nix": "sops-nix",
|
"sops-nix": "sops-nix",
|
||||||
"steam-rom-manager": "steam-rom-manager"
|
"steam-rom-manager": "steam-rom-manager"
|
||||||
@@ -1259,7 +1333,7 @@
|
|||||||
},
|
},
|
||||||
"snowfall-lib": {
|
"snowfall-lib": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_5",
|
"flake-compat": "flake-compat_6",
|
||||||
"flake-utils-plus": "flake-utils-plus",
|
"flake-utils-plus": "flake-utils-plus",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
@@ -1281,7 +1355,7 @@
|
|||||||
},
|
},
|
||||||
"sops-nix": {
|
"sops-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_13"
|
"nixpkgs": "nixpkgs_14"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752544651,
|
"lastModified": 1752544651,
|
||||||
|
|||||||
@@ -67,6 +67,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nixos-apple-silicon.url = "github:nix-community/nixos-apple-silicon";
|
nixos-apple-silicon.url = "github:nix-community/nixos-apple-silicon";
|
||||||
|
|
||||||
|
pre-commit-hooks-nix.url = "github:cachix/pre-commit-hooks.nix";
|
||||||
};
|
};
|
||||||
|
|
||||||
# We will handle this in the next section.
|
# We will handle this in the next section.
|
||||||
@@ -81,10 +83,6 @@
|
|||||||
# Nix files to a separate directory.
|
# Nix files to a separate directory.
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
# Add modules to all NixOS systems.
|
|
||||||
systems.
|
|
||||||
|
|
||||||
|
|
||||||
# Add a module to a specific host.
|
# Add a module to a specific host.
|
||||||
systems = {
|
systems = {
|
||||||
# common modules
|
# common modules
|
||||||
@@ -107,9 +105,6 @@
|
|||||||
nixos-hardware.nixosModules.common-hidpi
|
nixos-hardware.nixosModules.common-hidpi
|
||||||
nixos-hardware.nixosModules.common-pc
|
nixos-hardware.nixosModules.common-pc
|
||||||
];
|
];
|
||||||
specialArgs = {
|
|
||||||
hyprlandSettings = import ./systems/x86_64-linux/desktop/hyprland-settings.nix;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./hardware.nix
|
|
||||||
./programs.nix
|
|
||||||
./services.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
# Hardware configs
|
|
||||||
hardware = {
|
|
||||||
# Enable graphics
|
|
||||||
graphics = {
|
|
||||||
enable = lib.mkDefault true;
|
|
||||||
enable32Bit = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
services = {
|
|
||||||
kmscon.enable = lib.mkForce false;
|
|
||||||
|
|
||||||
# configure pipewire
|
|
||||||
pipewire = {
|
|
||||||
enable = lib.mkDefault true;
|
|
||||||
alsa.enable = lib.mkDefault true;
|
|
||||||
alsa.support32Bit = lib.mkDefault true;
|
|
||||||
pulse.enable = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable CUPS to print documents.
|
|
||||||
printing.enable = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
let
|
|
||||||
timezone = "America/Chicago";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./boot.nix
|
|
||||||
./environment.nix
|
|
||||||
./hardware.nix
|
|
||||||
./nix-settings.nix
|
|
||||||
./programs.nix
|
|
||||||
./security.nix
|
|
||||||
./services.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Time config
|
|
||||||
time = {
|
|
||||||
# Set your time zone.
|
|
||||||
timeZone = timezone;
|
|
||||||
};
|
|
||||||
|
|
||||||
fonts.packages = with pkgs; [
|
|
||||||
font-awesome
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-color-emoji
|
|
||||||
meslo-lgs-nf
|
|
||||||
] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
|
||||||
|
|
||||||
fonts.fontconfig.defaultFonts = {
|
|
||||||
emoji = [
|
|
||||||
"Noto Color Emoji"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "23.11";
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
environment = {
|
|
||||||
systemPackages = with pkgs; [
|
|
||||||
attic-client
|
|
||||||
uutils-coreutils
|
|
||||||
uutils-diffutils
|
|
||||||
uutils-findutils
|
|
||||||
coreutils
|
|
||||||
nixd
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
hardware = {
|
|
||||||
# Bluetooth
|
|
||||||
bluetooth.enable = lib.mkDefault true;
|
|
||||||
|
|
||||||
i2c.enable = lib.mkDefault true;
|
|
||||||
|
|
||||||
# Enable all firmware
|
|
||||||
enableAllFirmware = lib.mkForce true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
programs = {
|
|
||||||
zsh.enable = lib.mkDefault true;
|
|
||||||
gnupg.agent = {
|
|
||||||
enable = lib.mkDefault true;
|
|
||||||
enableSSHSupport = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
nix-index = {
|
|
||||||
enable = lib.mkDefault true;
|
|
||||||
enableBashIntegration = lib.mkDefault false;
|
|
||||||
enableZshIntegration = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./samba
|
|
||||||
./apps/free-games-claimer
|
|
||||||
./apps/manyfold
|
|
||||||
./apps/mongodb
|
|
||||||
./apps/tdarr
|
|
||||||
./apps/your-spotify
|
|
||||||
];
|
|
||||||
}
|
|
||||||
126
modules/home/desktop/extra/btop/default.nix
Executable file
@@ -0,0 +1,126 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.btop;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.btop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
color_theme = "nord"; # todo
|
||||||
|
theme_background = true;
|
||||||
|
truecolor = true;
|
||||||
|
force_tty = false;
|
||||||
|
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty";
|
||||||
|
vim_keys = true;
|
||||||
|
rounded_corners = true;
|
||||||
|
graph_symbol = "braille";
|
||||||
|
graph_symbol_cpu = "default";
|
||||||
|
graph_symbol_mem = "default";
|
||||||
|
graph_symbol_net = "default";
|
||||||
|
graph_symbol_proc = "default";
|
||||||
|
shown_boxes = "cpu mem net proc";
|
||||||
|
update_ms = 2000;
|
||||||
|
proc_sorting = "cpu lazy";
|
||||||
|
proc_reversed = false;
|
||||||
|
proc_tree = false;
|
||||||
|
proc_colors = true;
|
||||||
|
proc_gradient = true;
|
||||||
|
proc_per_core = false;
|
||||||
|
proc_mem_bytes = true;
|
||||||
|
proc_cpu_graphs = true;
|
||||||
|
proc_info_smaps = false;
|
||||||
|
proc_left = false;
|
||||||
|
proc_filter_kernel = false;
|
||||||
|
cpu_graph_upper = "total";
|
||||||
|
cpu_graph_lower = "total";
|
||||||
|
cpu_invert_lower = true;
|
||||||
|
cpu_single_graph = false;
|
||||||
|
cpu_bottom = false;
|
||||||
|
show_uptime = true;
|
||||||
|
check_temp = true;
|
||||||
|
cpu_sensor = "Auto";
|
||||||
|
show_coretemp = true;
|
||||||
|
cpu_core_map = "";
|
||||||
|
temp_scale = "celsius";
|
||||||
|
base_10_sizes = false;
|
||||||
|
show_cpu_freq = true;
|
||||||
|
clock_format = "%X";
|
||||||
|
background_update = true;
|
||||||
|
custom_cpu_name = "";
|
||||||
|
disks_filter = "";
|
||||||
|
mem_graphs = true;
|
||||||
|
mem_below_net = false;
|
||||||
|
zfs_arc_cached = true;
|
||||||
|
show_swap = true;
|
||||||
|
swap_disk = true;
|
||||||
|
show_disks = true;
|
||||||
|
only_physical = true;
|
||||||
|
use_fstab = true;
|
||||||
|
zfs_hide_datasets = false;
|
||||||
|
disk_free_priv = false;
|
||||||
|
show_io_stat = true;
|
||||||
|
io_mode = false;
|
||||||
|
io_graph_combined = false;
|
||||||
|
io_graph_speeds = "";
|
||||||
|
net_download = 100;
|
||||||
|
net_upload = 100;
|
||||||
|
net_auto = true;
|
||||||
|
net_sync = true;
|
||||||
|
net_iface = "";
|
||||||
|
show_battery = true;
|
||||||
|
selected_battery = "Auto";
|
||||||
|
log_level = "WARNING";
|
||||||
|
};
|
||||||
|
themes = {
|
||||||
|
nord = ''
|
||||||
|
theme[main_bg]="${nord.polarNight.nord0}"
|
||||||
|
theme[main_fg]="${nord.snowStorm.nord6}"
|
||||||
|
theme[title]="${nord.snowStorm.nord6}"
|
||||||
|
theme[hi_fg]="${nord.frost.nord7}"
|
||||||
|
theme[selected_bg]="${nord.polarNight.nord1}"
|
||||||
|
theme[selected_fg]="${nord.frost.nord7}"
|
||||||
|
theme[inactive_fg]="${nord.polarNight.nord2}"
|
||||||
|
theme[graph_text]="${nord.snowStorm.nord6}"
|
||||||
|
theme[meter_bg]="${nord.polarNight.nord1}"
|
||||||
|
theme[proc_misc]="${nord.snowStorm.nord6}"
|
||||||
|
theme[cpu_box]="${nord.aurora.nord15}"
|
||||||
|
theme[mem_box]="${nord.aurora.nord14}"
|
||||||
|
theme[net_box]="${nord.aurora.nord12}"
|
||||||
|
theme[proc_box]="${nord.aurora.nord11}"
|
||||||
|
theme[div_line]="${nord.polarNight.nord1}"
|
||||||
|
theme[temp_start]="${nord.aurora.nord14}"
|
||||||
|
theme[temp_mid]="${nord.aurora.nord13}"
|
||||||
|
theme[temp_end]="${nord.aurora.nord11}"
|
||||||
|
theme[cpu_start]="${nord.aurora.nord15}"
|
||||||
|
theme[cpu_mid]="${nord.aurora.nord12}"
|
||||||
|
theme[cpu_end]="${nord.aurora.nord11}"
|
||||||
|
theme[free_start]="${nord.aurora.nord14}"
|
||||||
|
theme[free_mid]="${nord.aurora.nord13}"
|
||||||
|
theme[free_end]="${nord.aurora.nord12}"
|
||||||
|
theme[cached_start]="${nord.aurora.nord14}"
|
||||||
|
theme[cached_mid]="${nord.aurora.nord13}"
|
||||||
|
theme[cached_end]="${nord.aurora.nord12}"
|
||||||
|
theme[available_start]="${nord.snowStorm.nord6}"
|
||||||
|
theme[available_mid]="${nord.aurora.nord11}"
|
||||||
|
theme[available_end]="${nord.aurora.nord11}"
|
||||||
|
theme[used_start]="${nord.aurora.nord14}"
|
||||||
|
theme[used_mid]="${nord.aurora.nord13}"
|
||||||
|
theme[used_end]="${nord.aurora.nord11}"
|
||||||
|
theme[download_start]="${nord.frost.nord8}"
|
||||||
|
theme[download_mid]="${nord.frost.nord8}"
|
||||||
|
theme[download_end]="${nord.aurora.nord12}"
|
||||||
|
theme[upload_start]="${nord.frost.nord7}"
|
||||||
|
theme[upload_mid]="${nord.frost.nord7}"
|
||||||
|
theme[upload_end]="${nord.aurora.nord12}"
|
||||||
|
theme[process_start]="${nord.aurora.nord15}"
|
||||||
|
theme[process_mid]="${nord.aurora.nord12}"
|
||||||
|
theme[process_end]="${nord.aurora.nord11}"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/home/desktop/extra/btop/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.btop = {
|
||||||
|
enable = mkEnableOption "enable btop";
|
||||||
|
};
|
||||||
|
}
|
||||||
105
modules/home/desktop/extra/kitty/default.nix
Executable file
@@ -0,0 +1,105 @@
|
|||||||
|
{ lib, config, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.kitty;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
shellIntegration.enableZshIntegration = true;
|
||||||
|
|
||||||
|
font = {
|
||||||
|
name = settings.fontName;
|
||||||
|
package = settings.fontPackage;
|
||||||
|
size = settings.fontSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
bold_font = "auto";
|
||||||
|
italic_font = "auto";
|
||||||
|
bold_italic_font = "auto";
|
||||||
|
mouse_hide_wait = "2.0";
|
||||||
|
cursor_shape = "block";
|
||||||
|
url_style = "dotted";
|
||||||
|
confirm_os_window_close = "0";
|
||||||
|
background_opacity = "0.85";
|
||||||
|
|
||||||
|
# The basic colors
|
||||||
|
foreground = settings.theme.snowStorm.nord6;
|
||||||
|
background = settings.theme.polarNight.nord0;
|
||||||
|
selection_foreground = settings.theme.polarNight.nord0;
|
||||||
|
selection_background = settings.theme.aurora.nord15;
|
||||||
|
|
||||||
|
# Cursor colors
|
||||||
|
cursor = settings.theme.aurora.nord15;
|
||||||
|
cursor_text_color = settings.theme.polarNight.nord0;
|
||||||
|
|
||||||
|
# URL underline color when hovering with mouse
|
||||||
|
url_color = settings.theme.aurora.nord15;
|
||||||
|
|
||||||
|
# Kitty window border colors
|
||||||
|
active_border_color = settings.theme.frost.nord10;
|
||||||
|
inactive_border_color = settings.theme.polarNight.nord1;
|
||||||
|
bell_border_color = settings.theme.aurora.nord13;
|
||||||
|
|
||||||
|
# OS Window titlebar colors
|
||||||
|
wayland_titlebar_color = settings.theme.polarNight.nord0;
|
||||||
|
macos_titlebar_color = settings.theme.polarNight.nord0;
|
||||||
|
|
||||||
|
# Tab bar colors
|
||||||
|
active_tab_foreground = settings.theme.polarNight.nord3;
|
||||||
|
active_tab_background = settings.theme.aurora.nord15;
|
||||||
|
inactive_tab_foreground = settings.theme.snowStorm.nord6;
|
||||||
|
inactive_tab_background = settings.theme.polarNight.nord1;
|
||||||
|
tab_bar_background = settings.theme.polarNight.nord3;
|
||||||
|
|
||||||
|
# Colors for marks (marked text in the terminal)
|
||||||
|
mark1_foreground = settings.theme.polarNight.nord0;
|
||||||
|
mark1_background = settings.theme.frost.nord10;
|
||||||
|
mark2_foreground = settings.theme.polarNight.nord0;
|
||||||
|
mark2_background = settings.theme.aurora.nord15;
|
||||||
|
mark3_foreground = settings.theme.polarNight.nord0;
|
||||||
|
mark3_background = settings.theme.frost.nord8;
|
||||||
|
|
||||||
|
# The 16 terminal colors
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 = settings.theme.polarNight.nord0;
|
||||||
|
|
||||||
|
# Autosuggestion
|
||||||
|
color8 = settings.theme.frost.nord10;
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 = settings.theme.aurora.nord11;
|
||||||
|
color9 = settings.theme.aurora.nord11;
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 = settings.theme.aurora.nord14;
|
||||||
|
color10 = settings.theme.aurora.nord14;
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 = settings.theme.aurora.nord13;
|
||||||
|
color11 = settings.theme.aurora.nord13;
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 = settings.theme.frost.nord10;
|
||||||
|
color12 = settings.theme.frost.nord10;
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 = settings.theme.aurora.nord15;
|
||||||
|
color13 = settings.theme.aurora.nord15;
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 = settings.theme.frost.nord8;
|
||||||
|
color14 = settings.theme.frost.nord8;
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 = settings.theme.snowStorm.nord5;
|
||||||
|
color15 = settings.theme.snowStorm.nord4;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
27
modules/home/desktop/extra/kitty/options.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.kitty = {
|
||||||
|
enable = mkEnableOption "enable kitty terminal";
|
||||||
|
|
||||||
|
font = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "DejaVu Sans";
|
||||||
|
};
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.dejavu_fonts;
|
||||||
|
};
|
||||||
|
size = mkOption {
|
||||||
|
type = with types; null || signed integer || floating point number;
|
||||||
|
default = 8;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
theme = mkOption {
|
||||||
|
type = types.attrs;
|
||||||
|
default = import ../../theme/nord.nix;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
32
modules/home/desktop/extra/mako/default.nix
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.mako;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
font = cfg.fontName;
|
||||||
|
icons = true;
|
||||||
|
ignore-timeout = true;
|
||||||
|
sort = "-time";
|
||||||
|
width = 500;
|
||||||
|
height = 110;
|
||||||
|
layer = "overlay";
|
||||||
|
border-radius = 15;
|
||||||
|
border-size = 1;
|
||||||
|
max-icon-size = 64;
|
||||||
|
default-timeout = 5000;
|
||||||
|
|
||||||
|
background-color = nord.polarNight.nord0;
|
||||||
|
text-color = nord.snowStorm.nord6;
|
||||||
|
border-color = nord.frost.nord10;
|
||||||
|
progress-color = "over ${nord.frost.nord8}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
modules/home/desktop/extra/mako/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.mako = {
|
||||||
|
enable = mkEnableOption "enable mako";
|
||||||
|
|
||||||
|
fontName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "DejaVu Sans";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
60
modules/home/desktop/extra/nwg-dock/default.nix
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.nwg-dock;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ nwg-dock-hyprland ];
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/nwg-dock-hyprland/drawer.css".text = ''
|
||||||
|
window {
|
||||||
|
background: ${nord.polarNight.nord0};
|
||||||
|
border-radius: 10px;
|
||||||
|
border-style: none;
|
||||||
|
border-width: 1px;
|
||||||
|
border-color: ${nord.aurora.nord15}b0
|
||||||
|
}
|
||||||
|
|
||||||
|
#box {
|
||||||
|
/* Define attributes of the box surrounding icons here */
|
||||||
|
padding: 10px
|
||||||
|
}
|
||||||
|
|
||||||
|
active {
|
||||||
|
/* This is to underline the button representing the currently active window */
|
||||||
|
border-bottom: solid 1px;
|
||||||
|
border-color: ${nord.aurora.nord14}1a
|
||||||
|
}
|
||||||
|
|
||||||
|
button, image {
|
||||||
|
background: none;
|
||||||
|
border-style: none;
|
||||||
|
box-shadow: none;
|
||||||
|
color: ${nord.frost.nord10}
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 4px;
|
||||||
|
margin-left: 4px;
|
||||||
|
margin-right: 4px;
|
||||||
|
color: #eee;
|
||||||
|
font-size: 12px
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: ${nord.polarNight.nord0}1a;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
box-shadow: none
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/home/desktop/extra/nwg-dock/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.nwg-dock = {
|
||||||
|
enable = mkEnableOption "enable nwg-dock";
|
||||||
|
};
|
||||||
|
}
|
||||||
52
modules/home/desktop/extra/nwg-drawer/default.nix
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.nwg-drawer;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ nwg-drawer ];
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/nwg-drawer/drawer.css".text = ''
|
||||||
|
window {
|
||||||
|
background-color: ${nord.polarNight.nord0}bf;
|
||||||
|
color: ${nord.snowStorm.nord5}00
|
||||||
|
}
|
||||||
|
|
||||||
|
/* search entry */
|
||||||
|
entry {
|
||||||
|
background-color: ${nord.polarNight.nord1}0f
|
||||||
|
}
|
||||||
|
|
||||||
|
button, image {
|
||||||
|
background: none;
|
||||||
|
border: none
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: ${nord.frost.nord10}1a
|
||||||
|
}
|
||||||
|
|
||||||
|
/* in case you wanted to give category buttons a different look */
|
||||||
|
#category-button {
|
||||||
|
margin: 0 10px 0 10px
|
||||||
|
}
|
||||||
|
|
||||||
|
#pinned-box {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
border-bottom: 1px dotted ${nord.polarNight.nord3}
|
||||||
|
}
|
||||||
|
|
||||||
|
#files-box {
|
||||||
|
padding: 5px;
|
||||||
|
border: 1px dotted ${nord.polarNight.nord3};
|
||||||
|
border-radius: 15px
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/home/desktop/extra/nwg-drawer/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.nwg-drawer = {
|
||||||
|
enable = mkEnableOption "enable nwg-drawer";
|
||||||
|
};
|
||||||
|
}
|
||||||
26
modules/home/desktop/extra/nwg-panel/default.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.nwg-dock;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.file = {
|
||||||
|
".config/nwg-panel/excluded-dirs".text = ''
|
||||||
|
|
||||||
|
'';
|
||||||
|
".config/nwg-panel/preferred-apps.json".text = ''
|
||||||
|
{
|
||||||
|
"\\.pdf$": "${cfg.defaultApps.browser.pname}",
|
||||||
|
"\\.svg$": "inkscape",
|
||||||
|
"\\.(jpg|png|tiff|gif)$": "${cfg.defaultApps.imageViewer.pname}",
|
||||||
|
"\\.(mp3|ogg|flac|wav|wma)$": "audacious",
|
||||||
|
"\\.(avi|mp4|mkv|mov|wav)$": "${cfg.defaultApps.video.pname}",
|
||||||
|
"\\.(doc|docx|xls|xlsx)$": "${cfg.defaultApps.office.pname}"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
modules/home/desktop/extra/nwg-panel/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.nwg-panel = {
|
||||||
|
enable = mkEnableOption "enable nwg-panel";
|
||||||
|
|
||||||
|
defaultApps = mkOption {
|
||||||
|
type = attrs;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
534
modules/home/desktop/extra/waybar/default.nix
Executable file
@@ -0,0 +1,534 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.waybar;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
|
||||||
|
defaultOpacity = "opacity: 0.85;";
|
||||||
|
defaultBorderRadius = "border-radius: 1rem;";
|
||||||
|
defaultCenterOptions = ''
|
||||||
|
padding-top: 0.2rem;
|
||||||
|
padding-bottom: 0.2rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
margin: 3px 0;
|
||||||
|
'';
|
||||||
|
borderRight = ''
|
||||||
|
padding-top: 0.2rem;
|
||||||
|
padding-bottom: 0.2rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
margin: 3px 0;
|
||||||
|
border-radius: 0rem 1rem 1rem 0rem;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
'';
|
||||||
|
borderLeft = ''
|
||||||
|
padding-top: 0.2rem;
|
||||||
|
padding-bottom: 0.2rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
margin: 3px 0;
|
||||||
|
border-radius: 1rem 0rem 0rem 1rem;
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
imports = [
|
||||||
|
./scripts/hass.nix
|
||||||
|
./scripts/weather.nix
|
||||||
|
];
|
||||||
|
# https://github.com/Alexays/Waybar/wiki/Module:-Hyprland
|
||||||
|
# https://www.nerdfonts.com/cheat-sheet
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
settings = {
|
||||||
|
mainBar = {
|
||||||
|
layer = cfg.layer;
|
||||||
|
position = "top";
|
||||||
|
mod = "dock";
|
||||||
|
exclusive = true;
|
||||||
|
passthrough = false;
|
||||||
|
gtk-layer-shell = true;
|
||||||
|
height = 0;
|
||||||
|
|
||||||
|
# Module Layout
|
||||||
|
modules-left = [ "hyprland/workspaces" ];
|
||||||
|
|
||||||
|
modules-center = [ "hyprland/window" ];
|
||||||
|
|
||||||
|
modules-right = cfg.modules-right;
|
||||||
|
|
||||||
|
# Module Definitions
|
||||||
|
# Left
|
||||||
|
"hyprland/workspaces" = {
|
||||||
|
disable-scroll = true;
|
||||||
|
all-outputs = true;
|
||||||
|
on-click = "activate";
|
||||||
|
persistent_workspaces = {
|
||||||
|
"*" = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Center
|
||||||
|
"hyprland/window" = {
|
||||||
|
separate-outputs = true;
|
||||||
|
format = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
# Left
|
||||||
|
tray = {
|
||||||
|
icon-size = 16;
|
||||||
|
spacing = 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature = {
|
||||||
|
hwmon-path = "/sys/class/hwmon/hwmon4/temp1_input";
|
||||||
|
critical-threshold = 110;
|
||||||
|
format-critical = "{temperatureC}°C ";
|
||||||
|
format = "{temperatureC}°C {icon}";
|
||||||
|
format-icons = [
|
||||||
|
"" # fa-temperature-empty
|
||||||
|
"" # fa-temperature-quarter
|
||||||
|
"" # fa-temperature-half
|
||||||
|
"" # fa-temperature-three-quarters
|
||||||
|
"" # fa-temperature-full
|
||||||
|
];
|
||||||
|
tooltip-format = "CPU: {temperatureC}°C";
|
||||||
|
};
|
||||||
|
|
||||||
|
"temperature#gpu" = {
|
||||||
|
hwmon-path = "/sys/class/hwmon/hwmon0/temp1_input";
|
||||||
|
critical-threshold = 110;
|
||||||
|
format-critical = "{temperatureC}°C ";
|
||||||
|
format = "{temperatureC}°C {icon}";
|
||||||
|
format-icons = [
|
||||||
|
"" # fa-temperature-empty
|
||||||
|
"" # fa-temperature-quarter
|
||||||
|
"" # fa-temperature-half
|
||||||
|
"" # fa-temperature-three-quarters
|
||||||
|
"" # fa-temperature-full
|
||||||
|
];
|
||||||
|
on-click = "lact";
|
||||||
|
tooltip-format = "GPU: {temperatureC}°C";
|
||||||
|
};
|
||||||
|
|
||||||
|
"keyboard-state#capslock" = {
|
||||||
|
capslock = true;
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "Caps Lock {state}";
|
||||||
|
format-icons = {
|
||||||
|
locked = "";
|
||||||
|
unlocked = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"keyboard-state#numlock" = {
|
||||||
|
numlock = true;
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "Num Lock {state}";
|
||||||
|
format-icons = {
|
||||||
|
locked = "";
|
||||||
|
unlocked = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"wireplumber#sink" = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
tooltip = false;
|
||||||
|
format-muted = "{icon} Muted";
|
||||||
|
on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
|
||||||
|
on-click-right = "pavucontrol -t 1";
|
||||||
|
on-scroll-up = "wpctl set-volume @DEFAULT_SINK@ 5%+";
|
||||||
|
on-scroll-down = "wpctl set-volume @DEFAULT_SINK@ 5%-";
|
||||||
|
scroll-step = 5;
|
||||||
|
format-icons = {
|
||||||
|
headphone = "";
|
||||||
|
headphone-muted = "";
|
||||||
|
hands-free = "";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
portable = "";
|
||||||
|
car = "";
|
||||||
|
default = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"wireplumber#source" = {
|
||||||
|
node-type = "Audio/Source";
|
||||||
|
format = "";
|
||||||
|
format-muted = "";
|
||||||
|
tooltip = false;
|
||||||
|
# tooltip-format = "{source_desc} | {source_volume}%";
|
||||||
|
on-click = "wpctl set-mute @DEFAULT_SOURCE@ toggle";
|
||||||
|
on-click-right = "pavucontrol -t 2";
|
||||||
|
on-scroll-up = "wpctl set-volume @DEFAULT_SOURCE@ 5%+";
|
||||||
|
on-scroll-down = "wpctl set-volume @DEFAULT_SOURCE@ 5%-";
|
||||||
|
scroll-step = 5;
|
||||||
|
};
|
||||||
|
|
||||||
|
"bluetooth" = {
|
||||||
|
on-click = "overskride";
|
||||||
|
tooltip = true;
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "{status}";
|
||||||
|
tooltip-format-disabled = "{status}";
|
||||||
|
tooltip-format-off = "{status}";
|
||||||
|
tooltip-format-on = "{status}";
|
||||||
|
tooltip-format-connected = "{status}";
|
||||||
|
tooltip-format-enumerate-connected = { };
|
||||||
|
format-icons = {
|
||||||
|
disabled = "";
|
||||||
|
off = "";
|
||||||
|
on = "";
|
||||||
|
connected = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
|
interface = cfg.networkInterface;
|
||||||
|
on-click = "nm-connection-editor";
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "{ifname} via {gwaddr} ";
|
||||||
|
tooltip-format-wifi = ''
|
||||||
|
{essid} ({signalStrength}%) {icon}
|
||||||
|
{bandwidthDownBits} {bandwidthUpBits}
|
||||||
|
'';
|
||||||
|
tooltip-format-ethernet = "{ifname} ";
|
||||||
|
tooltip-format-disconnected = "Disconnected";
|
||||||
|
max-length = 50;
|
||||||
|
format-icons = {
|
||||||
|
wifi = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
ethernet = "";
|
||||||
|
linked = "";
|
||||||
|
disconnected = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
idle_inhibitor = {
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
activated = "";
|
||||||
|
deactivated = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
clock = {
|
||||||
|
format = "{:%I:%M %p}";
|
||||||
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
||||||
|
calendar = {
|
||||||
|
mode = "month";
|
||||||
|
format = {
|
||||||
|
months = "<span color='${nord.frost.nord9}'><b>{}</b></span>";
|
||||||
|
days = "<span color='${nord.frost.nord10}'><b>{}</b></span>";
|
||||||
|
weekdays = "<span color='${nord.frost.nord8}'><b>{}</b></span>";
|
||||||
|
today = "<span color='${nord.aurora.nord14}'><b><u>{}</u></b></span>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
# bat = "macsmc-battery";
|
||||||
|
interval = 60;
|
||||||
|
# statuses: 'Charging', 'Discharging'
|
||||||
|
states = {
|
||||||
|
warning = 30;
|
||||||
|
critical = 15;
|
||||||
|
};
|
||||||
|
format = "{capacity}% {icon}";
|
||||||
|
format-icons = {
|
||||||
|
default = [
|
||||||
|
"" # critical
|
||||||
|
"" # 10%
|
||||||
|
"" # 20%
|
||||||
|
"" # 30%
|
||||||
|
"" # 40%
|
||||||
|
"" # 50%
|
||||||
|
"" # 60%
|
||||||
|
"" # 70%
|
||||||
|
"" # 80%
|
||||||
|
"" # 90%
|
||||||
|
"" # 100%
|
||||||
|
];
|
||||||
|
charging = [
|
||||||
|
"" # critical
|
||||||
|
"" # 10%
|
||||||
|
"" # 20%
|
||||||
|
"" # 30%
|
||||||
|
"" # 40%
|
||||||
|
"" # 50%
|
||||||
|
"" # 60%
|
||||||
|
"" # 70%
|
||||||
|
"" # 80%
|
||||||
|
"" # 90%
|
||||||
|
"" # 100%
|
||||||
|
];
|
||||||
|
};
|
||||||
|
max-length = 25;
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/weather" = {
|
||||||
|
tooltip = true;
|
||||||
|
format = { };
|
||||||
|
interval = 30;
|
||||||
|
exec = "waybar-weather";
|
||||||
|
return-type = "json";
|
||||||
|
markup = "pango";
|
||||||
|
};
|
||||||
|
} // cfg.extraModules;
|
||||||
|
};
|
||||||
|
|
||||||
|
# * { font-size: 13px; }
|
||||||
|
# window.eDP-1 * { font-size: 10px; }
|
||||||
|
|
||||||
|
style = ''
|
||||||
|
.blink_me {
|
||||||
|
animation: blinker 1s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blinker {
|
||||||
|
50% {
|
||||||
|
color: ${nord.aurora.nord11};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family:
|
||||||
|
Jetbrains Mono Nerd Font,
|
||||||
|
monospace;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#waybar {
|
||||||
|
background: transparent;
|
||||||
|
color: ${nord.snowStorm.nord6};
|
||||||
|
margin: 5px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
margin-left: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
color: ${nord.frost.nord10};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
padding: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
color: ${nord.frost.nord8};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
color: ${nord.frost.nord7};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
color: ${nord.snowStorm.nord6};
|
||||||
|
background: ${nord.aurora.nord13};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
color: ${nord.polarNight.nord0};
|
||||||
|
background: ${nord.snowStorm.nord6};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
}
|
||||||
|
|
||||||
|
#tooltip {
|
||||||
|
background: ${nord.polarNight.nord0};
|
||||||
|
border-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultBorderRadius}
|
||||||
|
border-width: 1rem;
|
||||||
|
border-style: solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
color: ${nord.aurora.nord15};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultBorderRadius}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
margin-left: ${hyprlandSettings.waybar.moduleStyle.window.margin-left or "4rem"};
|
||||||
|
margin-right: ${hyprlandSettings.waybar.moduleStyle.window.margin-right or "4rem"};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* make window module transparent when no windows present */
|
||||||
|
#window.empty {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather {
|
||||||
|
color: ${nord.frost.nord10};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${borderRight}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
color: ${nord.aurora.nord15};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
min-width: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
color: ${nord.frost.nord9};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${borderLeft}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------- */
|
||||||
|
|
||||||
|
#idle_inhibitor {
|
||||||
|
color: ${nord.frost.nord10};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${borderRight}
|
||||||
|
padding-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibitor:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
color: ${nord.aurora.nord15};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
padding-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
color: ${nord.frost.nord9};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.source {
|
||||||
|
color: ${nord.frost.nord8};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.source.muted {
|
||||||
|
animation-name: blinker;
|
||||||
|
animation-duration: 2s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
padding-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.source:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.sink {
|
||||||
|
color: ${nord.frost.nord7};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.sink.muted {
|
||||||
|
animation-name: blinker;
|
||||||
|
animation-duration: 5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.sink:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state.numlock {
|
||||||
|
color: ${nord.frost.nord8};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state.capslock {
|
||||||
|
color: ${nord.frost.nord9};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.gpu {
|
||||||
|
color: ${nord.frost.nord10};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.gpu:hover {
|
||||||
|
background: ${nord.polarNight.nord3};
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature {
|
||||||
|
color: ${nord.frost.nord9};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${hyprlandSettings.waybar.moduleStyle.temperature.location or defaultCenterOptions}
|
||||||
|
border-radius: ${hyprlandSettings.waybar.moduleStyle.temperature.border-radius or "0"}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------- */
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${defaultCenterOptions}
|
||||||
|
${defaultBorderRadius}
|
||||||
|
margin-right: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------- */
|
||||||
|
'' + hyprlandSettings.waybar.extraModulesStyle or '''';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
27
modules/home/desktop/extra/waybar/options.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.waybar = {
|
||||||
|
enable = mkEnableOption "enable waybar";
|
||||||
|
|
||||||
|
layer = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "top";
|
||||||
|
};
|
||||||
|
|
||||||
|
modules-right = mkOption {
|
||||||
|
type = with types; listOf string;
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
networkInterface = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "wlan0";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraModules = mkOption {
|
||||||
|
type = types.attrs;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
104
modules/home/desktop/extra/wlogout/default.nix
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.wlogout;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.wlogout = {
|
||||||
|
enable = true;
|
||||||
|
layout = {
|
||||||
|
lock = {
|
||||||
|
label = "lock";
|
||||||
|
action = "hyprlock --immediate";
|
||||||
|
text = "Lock";
|
||||||
|
keybind = "l";
|
||||||
|
};
|
||||||
|
hibernate = {
|
||||||
|
label = "hibernate";
|
||||||
|
action = "systemctl hibernate";
|
||||||
|
text = "Hibernate";
|
||||||
|
keybind = "h";
|
||||||
|
};
|
||||||
|
logout = {
|
||||||
|
label = "logout";
|
||||||
|
action = "sleep 1; hyprctl dispatch exit";
|
||||||
|
text = "Logout";
|
||||||
|
keybind = "e";
|
||||||
|
};
|
||||||
|
shutdown = {
|
||||||
|
label = "shutdown";
|
||||||
|
action = "systemctl poweroff";
|
||||||
|
text = "Shutdown";
|
||||||
|
keybind = "s";
|
||||||
|
};
|
||||||
|
suspend = {
|
||||||
|
label = "suspend";
|
||||||
|
action = "systemctl suspend";
|
||||||
|
text = "Suspend";
|
||||||
|
keybind = "u";
|
||||||
|
};
|
||||||
|
reboot = {
|
||||||
|
label = "reboot";
|
||||||
|
action = "reboot";
|
||||||
|
text = "Reboot";
|
||||||
|
keybind = "r";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
style = ''
|
||||||
|
* {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-color: ${nord.polarNight.nord0}f0
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
margin: 8px;
|
||||||
|
color: ${nord.frost.nord7};
|
||||||
|
background-color: ${nord.polarNight.nord1};
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 2px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
button:focus,
|
||||||
|
button:hover {
|
||||||
|
color: ${nord.frost.nord8};
|
||||||
|
background-color: ${nord.polarNight.nord2};
|
||||||
|
outline-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lock {
|
||||||
|
background-image: image(url("icons/lock.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout {
|
||||||
|
background-image: image(url("icons/logout.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#suspend {
|
||||||
|
background-image: image(url("icons/suspend.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#hibernate {
|
||||||
|
background-image: image(url("icons/hibernate.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown {
|
||||||
|
background-image: image(url("icons/shutdown.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#reboot {
|
||||||
|
background-image: image(url("icons/reboot.png"));
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
12
modules/home/desktop/extra/wlogout/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.wofi = {
|
||||||
|
enable = mkEnableOption "enable wofi";
|
||||||
|
|
||||||
|
fontName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "Deja Vu Sans";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
101
modules/home/desktop/extra/wofi/default.nix
Executable file
@@ -0,0 +1,101 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.extra.wofi;
|
||||||
|
nord = import ../../theme/nord.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.wofi = {
|
||||||
|
enable = true;
|
||||||
|
style = ''
|
||||||
|
* {
|
||||||
|
font-family: "${cfg.fontName}", monospace;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Window */
|
||||||
|
window {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 10px;
|
||||||
|
border: 0.16em solid ${nord.aurora.nord15};
|
||||||
|
border-radius: 0.1em;
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inner Box */
|
||||||
|
#inner-box {
|
||||||
|
margin: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Outer Box */
|
||||||
|
#outer-box {
|
||||||
|
margin: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scroll */
|
||||||
|
#scroll {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Input */
|
||||||
|
#input {
|
||||||
|
margin: 5px 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0.1em;
|
||||||
|
color: ${nord.snowStorm.nord6};
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
#input image {
|
||||||
|
border: none;
|
||||||
|
color: ${nord.aurora.nord11};
|
||||||
|
}
|
||||||
|
|
||||||
|
#input * {
|
||||||
|
outline: 4px solid ${nord.aurora.nord11}!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text */
|
||||||
|
#text {
|
||||||
|
margin: 5px;
|
||||||
|
border: none;
|
||||||
|
color: ${nord.snowStorm.nord6};
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry arrow {
|
||||||
|
border: none;
|
||||||
|
color: ${nord.aurora.nord15};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selected Entry */
|
||||||
|
#entry:selected {
|
||||||
|
border: 0.11em solid ${nord.aurora.nord15};
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected #text {
|
||||||
|
color: ${nord.frost.nord7};
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:drop(active) {
|
||||||
|
background-color: ${nord.aurora.nord15}!important;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
modules/home/desktop/extra/wofi/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.extra.wofi = {
|
||||||
|
enable = mkEnableOption "enable wofi";
|
||||||
|
|
||||||
|
fontName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "Deja Vu Sans";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
69
modules/home/desktop/gnome/default.nix
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{ config, lib, pkgs, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.gnome;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
apple-cursor
|
||||||
|
colloid-icon-theme
|
||||||
|
colloid-gtk-theme
|
||||||
|
gnome-tweaks
|
||||||
|
gnomeExtensions.allow-locked-remote-desktop
|
||||||
|
gnomeExtensions.appindicator
|
||||||
|
gnomeExtensions.arcmenu
|
||||||
|
gnomeExtensions.bing-wallpaper-changer
|
||||||
|
gnomeExtensions.dash-to-dock
|
||||||
|
gnomeExtensions.dash-to-panel
|
||||||
|
gnomeExtensions.gsconnect
|
||||||
|
gnomeExtensions.random-wallpaper
|
||||||
|
gnomeExtensions.tiling-assistant
|
||||||
|
gnomeExtensions.user-themes
|
||||||
|
gnomeExtensions.wikiart-wallpaper
|
||||||
|
papirus-icon-theme
|
||||||
|
pop-gtk-theme
|
||||||
|
];
|
||||||
|
|
||||||
|
dconf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"org/gnome/desktop/interface".clock-format = "12h";
|
||||||
|
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
|
||||||
|
"org/gnome/desktop/interface".cursor-theme = lib.mkDefault "macOS";
|
||||||
|
"org/gnome/desktop/interface".enable-hot-corners = false;
|
||||||
|
"org/gnome/desktop/interface".font-antialiasing = "grayscale";
|
||||||
|
"org/gnome/desktop/interface".font-hinting = "slight";
|
||||||
|
"org/gnome/desktop/interface".gtk-theme = lib.mkDefault "Colloid-Dark";
|
||||||
|
"org/gnome/desktop/interface".icon-theme = lib.mkDefault "Colloid-Dark";
|
||||||
|
"org/gnome/desktop/peripherals/mouse".accel-profile = "flat";
|
||||||
|
"org/gnome/desktop/peripherals/touchpad".two-finger-scrolling-enabled = true;
|
||||||
|
"org/gnome/desktop/peripherals/touchpad".tap-to-click = true;
|
||||||
|
"org/gnome/mutter".experimental-features = [
|
||||||
|
"scale-monitor-framebuffer"
|
||||||
|
"variable-refresh-rate"
|
||||||
|
];
|
||||||
|
"org/gnome/tweaks".show-extensions-notice = false;
|
||||||
|
"org/gnome/shell".enabled-extensions = [
|
||||||
|
"allowlockedremotedesktop@kamens.us"
|
||||||
|
"appindicatorsupport@rgcjonas.gmail.com"
|
||||||
|
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||||
|
"tiling-assistant@leleat-on-github"
|
||||||
|
"dash-to-dock@micxgx.gmail.com"
|
||||||
|
"BingWallpaper@ineffable-gmail.com"
|
||||||
|
"gsconnect@andyholmes.github.io"
|
||||||
|
];
|
||||||
|
"org/gnome/shell/extensions/bingwallpaper".override-lockscreen-blur = true;
|
||||||
|
"org/gnome/shell/extensions/bingwallpaper".random-mode-enabled = true;
|
||||||
|
"org/gnome/shell/extensions/bingwallpaper".revert-to-current-image = false;
|
||||||
|
"org/gnome/shell/extensions/dash-to-panel".primary-monitor = 1;
|
||||||
|
"org/gnome/shell/extensions/dash-to-panel".multi-monitors = false;
|
||||||
|
"org/gnome/shell/extensions/gsconnect".id = "4db35bd2-0dcd-42a3-9f77-ef3e8bb83182";
|
||||||
|
"org/gnome/shell/extensions/gsconnect".name = "matt-nixos";
|
||||||
|
"org/gnome/shell/extensions/user-theme".name = lib.mkDefault "Colloid-Dark";
|
||||||
|
"org/gtk/settings/file-chooser".clock-format = "12h";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/home/desktop/gnome/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.gnome = {
|
||||||
|
enable = mkEnableOption "enable gnome settings";
|
||||||
|
};
|
||||||
|
}
|
||||||
406
modules/home/desktop/hyprland/default.nix
Executable file
@@ -0,0 +1,406 @@
|
|||||||
|
{ config, lib, namespace, pkgs, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
drawer = "nwg-drawer -fm nautilus -term kitty -mb 10 -mt 10 -ml 10 -mr 10 -pbuseicontheme -i ${config.home-manager.users.matt.gtk.iconTheme.name}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
imports = [
|
||||||
|
./services/hypridle
|
||||||
|
./services/hyprlock
|
||||||
|
./services/hyprpaper
|
||||||
|
./packages.nix
|
||||||
|
./theme.nix
|
||||||
|
./variables.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
hyprpolkitagent.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
vscode.profiles.default.userSettings."window"."titleBarStyle" = "custom";
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
|
||||||
|
plugins = with pkgs.hyprlandPlugins; [
|
||||||
|
hyprgrass
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
"$mod" = "SUPER";
|
||||||
|
|
||||||
|
# Mouse
|
||||||
|
# mouse_[up|down] - scroll wheel
|
||||||
|
# middle_mouse - 274
|
||||||
|
# thumb_up - 276
|
||||||
|
# thumb_down - 275
|
||||||
|
|
||||||
|
# l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active.
|
||||||
|
# r -> release, will trigger on release of a key.
|
||||||
|
# e -> repeat, will repeat when held.
|
||||||
|
# n -> non-consuming, key/mouse events will be passed to the active window in addition to triggering the dispatcher.
|
||||||
|
# m -> mouse, see below.
|
||||||
|
# t -> transparent, cannot be shadowed by other binds.
|
||||||
|
# i -> ignore mods, will ignore modifiers.
|
||||||
|
# s -> separate, will arbitrarily combine keys between each mod/key, see [Keysym combos](#keysym-combos) above.
|
||||||
|
# d -> has description, will allow you to write a description for your bind.
|
||||||
|
# p -> bypasses the app's requests to inhibit keybinds.
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Binds/
|
||||||
|
# https://wiki.hyprland.org/Configuring/Binds/#mouse-buttons
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
"$mod, Return, exec, ${cfg.defaultApps.terminal.pname}"
|
||||||
|
"$mod, SPACE, exec, wofi --show drun"
|
||||||
|
", xf86Search, exec, wofi --show drun"
|
||||||
|
"$mod, Q, killactive, "
|
||||||
|
"$mod, M, exec, wlogout --protocol layer-shell"
|
||||||
|
"$mod, E, exec, ${cfg.defaultApps.fileExplorer.pname}"
|
||||||
|
"$mod, V, togglefloating, "
|
||||||
|
"$mod, D, exec, ${drawer}"
|
||||||
|
"$mod, P, pseudo, " # dwindle
|
||||||
|
"$mod, S, togglesplit, " # dwindle
|
||||||
|
"$mod SHIFT, Q, exec, hyprlock"
|
||||||
|
"$mod SHIFT, 4, exec, hyprshot -m region --clipboard-only"
|
||||||
|
"$mod, F, fullscreen, 1"
|
||||||
|
"$mod SHIFT, F, fullscreen, 0"
|
||||||
|
"$mod SHIFT, E, exec, smile"
|
||||||
|
|
||||||
|
"$mod, mouse:276, movecurrentworkspacetomonitor, ${cfg.displayLeft.input}"
|
||||||
|
"$mod, mouse:275, movecurrentworkspacetomonitor, ${cfg.displayRight.input}"
|
||||||
|
|
||||||
|
# alt-tab between workspaces on active monitor
|
||||||
|
"$mod, Tab, workspace, m+1"
|
||||||
|
"$mod SHIFT, Tab, workspace, m-1"
|
||||||
|
|
||||||
|
"$mod, h, movefocus, l"
|
||||||
|
"$mod, l, movefocus, r"
|
||||||
|
"$mod, k, movefocus, u"
|
||||||
|
"$mod, j, movefocus, d"
|
||||||
|
|
||||||
|
"$mod, 1, workspace, 1"
|
||||||
|
"$mod, 2, workspace, 2"
|
||||||
|
"$mod, 3, workspace, 3"
|
||||||
|
"$mod, 4, workspace, 4"
|
||||||
|
"$mod, 5, workspace, 5"
|
||||||
|
"$mod, 6, workspace, 6"
|
||||||
|
"$mod, 7, workspace, 7"
|
||||||
|
"$mod, 8, workspace, 8"
|
||||||
|
"$mod, 9, workspace, 9"
|
||||||
|
"$mod, 0, workspace, 10"
|
||||||
|
|
||||||
|
"$mod ALT, 1, movetoworkspace, 1"
|
||||||
|
"$mod ALT, 2, movetoworkspace, 2"
|
||||||
|
"$mod ALT, 3, movetoworkspace, 3"
|
||||||
|
"$mod ALT, 4, movetoworkspace, 4"
|
||||||
|
"$mod ALT, 5, movetoworkspace, 5"
|
||||||
|
"$mod ALT, 6, movetoworkspace, 6"
|
||||||
|
"$mod ALT, 7, movetoworkspace, 7"
|
||||||
|
"$mod ALT, 8, movetoworkspace, 8"
|
||||||
|
"$mod ALT, 9, movetoworkspace, 9"
|
||||||
|
"$mod ALT, 0, movetoworkspace, discord"
|
||||||
|
|
||||||
|
"$mod CTRL, l, resizeactive, 10 0"
|
||||||
|
"$mod CTRL, h, resizeactive, -10 0"
|
||||||
|
"$mod CTRL, k, resizeactive, 0 -10"
|
||||||
|
"$mod CTRL, j, resizeactive, 0 10"
|
||||||
|
|
||||||
|
"$mod SHIFT, l, movewindow, r"
|
||||||
|
"$mod SHIFT, h, movewindow, l"
|
||||||
|
"$mod SHIFT, k, movewindow, u"
|
||||||
|
"$mod SHIFT, j, movewindow, d"
|
||||||
|
|
||||||
|
"$mod, b, exec, ${cfg.defaultApps.browser.pname}"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [
|
||||||
|
# Move/resize windows with mod + LMB/RMB and dragging
|
||||||
|
"$mod, mouse:272, movewindow"
|
||||||
|
"$mod, mouse:273, resizewindow"
|
||||||
|
# middle mouse will grab a window, mod + middle mouse will close it
|
||||||
|
"$mod SHIFT, mouse:274, movewindow"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindel = [
|
||||||
|
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
|
||||||
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindl = [
|
||||||
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
|
", XF86AudioPlay, exec, playerctl play-pause"
|
||||||
|
", XF86AudioPrev, exec, playerctl previous"
|
||||||
|
", XF86AudioNext, exec, playerctl next"
|
||||||
|
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||||
|
|
||||||
|
", XF86MonBrightnessUp, exec, brightnessctl set +5%"
|
||||||
|
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
|
||||||
|
|
||||||
|
"$mod, XF86MonBrightnessUp, exec, brightnessctl -d kbd_backlight set +10%"
|
||||||
|
"$mod, XF86MonBrightnessDown, exec, brightnessctl -d kbd_backlight set 10%-"
|
||||||
|
];
|
||||||
|
|
||||||
|
monitor = cfg.monitor or [ ];
|
||||||
|
monitorv2 = cfg.monitorv2 or { };
|
||||||
|
|
||||||
|
render = {
|
||||||
|
cm_fs_passthrough = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
vrr = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 1;
|
||||||
|
"col.active_border" = "rgb(8aadf4) rgb(24273A) rgb(24273A) rgb(8aadf4) 45deg";
|
||||||
|
"col.inactive_border" = "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg";
|
||||||
|
layout = "dwindle";
|
||||||
|
allow_tearing = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10;
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 2;
|
||||||
|
passes = 2;
|
||||||
|
new_optimizations = true;
|
||||||
|
xray = false;
|
||||||
|
};
|
||||||
|
# drop_shadow = "yes";
|
||||||
|
# shadow_range = 4;
|
||||||
|
# shadow_render_power = "3";
|
||||||
|
# "col.shadow" = "rgba(1a1a1aee)";
|
||||||
|
};
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = "yes";
|
||||||
|
bezier = [
|
||||||
|
"overshot, 0.05, 0.9, 0.1, 1.05"
|
||||||
|
"smoothOut, 0.36, 0, 0.66, -0.56"
|
||||||
|
"smoothIn, 0.25, 1, 0.5, 1"
|
||||||
|
];
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 5, overshot, slide"
|
||||||
|
"windowsOut, 1, 4, smoothOut, slide"
|
||||||
|
"windowsMove, 1, 4, default"
|
||||||
|
"border, 1, 10, default"
|
||||||
|
"fade, 1, 10, smoothIn"
|
||||||
|
"fadeDim, 1, 10, smoothIn"
|
||||||
|
"workspaces, 1, 6, default"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = "yes";
|
||||||
|
preserve_split = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
workspace = cfg.workspace;
|
||||||
|
|
||||||
|
windowrule = [
|
||||||
|
"float, title:(file_progress)"
|
||||||
|
"float, title:(.*[Cc]onfirm.*)"
|
||||||
|
"float, title:(.*[Dd]ialog.*)"
|
||||||
|
"float, title:(.*[Dd]ownload.*)"
|
||||||
|
"float, title:(.*[Nn]otification.*)"
|
||||||
|
"float, title:(.*[Ee]rror.*)"
|
||||||
|
"float, title:(.*[Ss]plash.*)"
|
||||||
|
"float, title:(.*[Cc]onfirmreset.*)"
|
||||||
|
"float, title:(.*[Ss]ign [Ii]n - .*)"
|
||||||
|
"float, title:(.*[Oo]pen [Ff]ile.*)"
|
||||||
|
"float, title:(.*branchdialog.*)"
|
||||||
|
"float, class:(.*pavucontrol.*)"
|
||||||
|
"move onscreen cursor 0% 0%, class:(.*pavucontrol.*)"
|
||||||
|
"float, class:(.*[Oo]verskride.*)"
|
||||||
|
"float, class:(.*FileRoller.*)"
|
||||||
|
"float, class:(.*wlogout.*)"
|
||||||
|
"idleinhibit stayfocused, title:(.*mpv.*)"
|
||||||
|
|
||||||
|
"float, class:(.*nm-connection-editor.*)"
|
||||||
|
"move onscreen cursor 0% 0%, class:(.*nm-connection-editor.*)"
|
||||||
|
|
||||||
|
"float, title:(Media viewer)"
|
||||||
|
"float, class:(it.mijorus.smile),title:(Smile)"
|
||||||
|
"float, class:(.blueman-manager-wrapped)$,title:(Bluetooth Devices)"
|
||||||
|
# Picture in picture windows
|
||||||
|
"float, title:(.*Picture-in-Picture.*)"
|
||||||
|
"pin, title::(.*Picture-in-Picture.*)"
|
||||||
|
|
||||||
|
# discord/vesktop
|
||||||
|
"workspace: name:discord, class:(.*vesktop)"
|
||||||
|
"float, class:(.*vesktop),title:(.*Discord Popout.*)"
|
||||||
|
"pin, class:(.*vesktop),title:(.*Discord Popout.*)"
|
||||||
|
|
||||||
|
# Music
|
||||||
|
"workspace: name:discord, class:(Apple Music.*)"
|
||||||
|
|
||||||
|
# Steam
|
||||||
|
"float, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
||||||
|
"workspace name:steam silent, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
||||||
|
"tile, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
||||||
|
"float, class:(.*steam),title:(.*Friends List.*)"
|
||||||
|
|
||||||
|
# Code
|
||||||
|
"pin, class:(.*codium.*),title:(Save As)"
|
||||||
|
"float, class:(.*codium.*),title:(Save As)"
|
||||||
|
"float, class:(xdg-desktop-portal-gtk),title:(Open Workspace from File)"
|
||||||
|
|
||||||
|
# Game Tearing??? https://wiki.hyprland.org/Configuring/Tearing/
|
||||||
|
"immediate, class:(.*gamescope)"
|
||||||
|
|
||||||
|
# vmware
|
||||||
|
# this tag will set the below options to the vdi window
|
||||||
|
# this will have it auto open as a 2160x7680 window
|
||||||
|
# and makes multi-monitor work
|
||||||
|
"tag +horizonrdp, class:(.*[Vv][Mm]ware-view),title:(USPS Next VDI)"
|
||||||
|
|
||||||
|
"noanim, tag:horizonrdp"
|
||||||
|
"noblur, tag:horizonrdp"
|
||||||
|
"norounding, tag:horizonrdp"
|
||||||
|
"noshadow, tag:horizonrdp"
|
||||||
|
"immediate, tag:horizonrdp"
|
||||||
|
"allowsinput, tag:horizonrdp"
|
||||||
|
"noborder, tag:horizonrdp"
|
||||||
|
"nodim, tag:horizonrdp"
|
||||||
|
"nomaxsize, tag:horizonrdp"
|
||||||
|
"renderunfocused, tag:horizonrdp"
|
||||||
|
"idleinhibit, tag:horizonrdp"
|
||||||
|
"float, tag:horizonrdp"
|
||||||
|
# "size 2160 7680, tag:horizonrdp"
|
||||||
|
# "move onscreen 0 0, tag:horizonrdp"
|
||||||
|
# float the vmware window cause its annoying to use in fullscreen
|
||||||
|
"float, class:(.*[Vv][Mm]ware-view),title:([Vv][Mm]ware [Hh]orizon [Cc]lient)"
|
||||||
|
|
||||||
|
"tag +waydroid, class:([Ww]aydroid.*)"
|
||||||
|
"float, tag:waydroid"
|
||||||
|
"pin, tag:waydroid"
|
||||||
|
] ++ cfg.windowRule;
|
||||||
|
|
||||||
|
plugin = {
|
||||||
|
touch_gestures = {
|
||||||
|
# The default sensitivity is probably too low on tablet screens,
|
||||||
|
# I recommend turning it up to 4.0
|
||||||
|
sensitivity = "4.0";
|
||||||
|
|
||||||
|
# must be >= 3
|
||||||
|
workspace_swipe_fingers = "3";
|
||||||
|
|
||||||
|
# switching workspaces by swiping from an edge, this is separate from workspace_swipe_fingers
|
||||||
|
# and can be used at the same time
|
||||||
|
# possible values: l, r, u, or d
|
||||||
|
# to disable it set it to anything else
|
||||||
|
workspace_swipe_edge = "d";
|
||||||
|
|
||||||
|
# in milliseconds
|
||||||
|
long_press_delay = "400";
|
||||||
|
|
||||||
|
# resize windows by long-pressing on window borders and gaps.
|
||||||
|
# If general:resize_on_border is enabled, general:extend_border_grab_area is used for floating
|
||||||
|
# windows
|
||||||
|
resize_on_border_long_press = true;
|
||||||
|
|
||||||
|
# in pixels, the distance from the edge that is considered an edge
|
||||||
|
edge_margin = "10";
|
||||||
|
|
||||||
|
# emulates touchpad swipes when swiping in a direction that does not trigger workspace swipe.
|
||||||
|
# ONLY triggers when finger count is equal to workspace_swipe_fingers
|
||||||
|
#
|
||||||
|
# might be removed in the future in favor of event hooks
|
||||||
|
emulate_touchpad_swipe = false;
|
||||||
|
|
||||||
|
experimental = {
|
||||||
|
# send proper cancel events to windows instead of hacky touch_up events,
|
||||||
|
# NOT recommended as it crashed a few times, once it's stabilized I'll make it the default
|
||||||
|
send_cancel = "0";
|
||||||
|
};
|
||||||
|
|
||||||
|
hyprgrass-bind = [
|
||||||
|
# swipe left from right edge
|
||||||
|
", edge:r:l, workspace, +1"
|
||||||
|
|
||||||
|
# swipe up from bottom edge
|
||||||
|
", edge:d:u, exec, ${cfg.defaultApps.browser.pname}"
|
||||||
|
|
||||||
|
# swipe down from left edge
|
||||||
|
", edge:l:d, exec, pactl set-sink-volume @DEFAULT_SINK@ -4%"
|
||||||
|
|
||||||
|
# swipe down with 4 fingers
|
||||||
|
", swipe:4:d, killactive"
|
||||||
|
|
||||||
|
# swipe diagonally left and down with 3 fingers
|
||||||
|
# l (or r) must come before d and u
|
||||||
|
", swipe:3:ld, exec, foot"
|
||||||
|
|
||||||
|
# tap with 3 fingers
|
||||||
|
", tap:3, exec, foot"
|
||||||
|
|
||||||
|
# longpress can trigger mouse binds:
|
||||||
|
", longpress:2, movewindow"
|
||||||
|
", longpress:3, resizewindow"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gestures = {
|
||||||
|
workspace_swipe = true;
|
||||||
|
workspace_swipe_cancel_ratio = "0.15";
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
kb_layout = "us";
|
||||||
|
|
||||||
|
kb_variant = "";
|
||||||
|
kb_model = "";
|
||||||
|
kb_options = "";
|
||||||
|
kb_rules = "";
|
||||||
|
|
||||||
|
numlock_by_default = true;
|
||||||
|
|
||||||
|
follow_mouse = 1;
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
clickfinger_behavior = 1;
|
||||||
|
natural_scroll = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
|
||||||
|
};
|
||||||
|
|
||||||
|
experimental = {
|
||||||
|
xx_color_management_v4 = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
debug = {
|
||||||
|
full_cm_proto = true;
|
||||||
|
disable_logs = true;
|
||||||
|
disable_scale_checks = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
exec-once = dbus-update-activation-environment --systemd --all
|
||||||
|
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||||
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
exec-once = xhost +SI:localuser:root
|
||||||
|
exec-once = nwg-look -a
|
||||||
|
exec-once = nwg-dock-hyprland -d
|
||||||
|
'' + cfg.extraConfig or '''';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
67
modules/home/desktop/hyprland/options.nix
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.hyprland = {
|
||||||
|
enable = mkEnableOption "enable hyprland desktop";
|
||||||
|
|
||||||
|
primaryDisplay = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = "DP-1";
|
||||||
|
};
|
||||||
|
|
||||||
|
wallpaper = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = "/run/wallpaper.jpeg";
|
||||||
|
};
|
||||||
|
|
||||||
|
monitor = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [];
|
||||||
|
description = "list of hyprland monitor configs";
|
||||||
|
};
|
||||||
|
|
||||||
|
monitorv2 = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [];
|
||||||
|
description = "list of hyprland monitorv2 configs";
|
||||||
|
};
|
||||||
|
|
||||||
|
workspace = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [];
|
||||||
|
description = "list of hyprland workspace definitions";
|
||||||
|
};
|
||||||
|
|
||||||
|
windowRule = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [];
|
||||||
|
description = "list of hyprland window rules";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = with types; str;
|
||||||
|
default = '''';
|
||||||
|
description = "any extra options";
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultApps = mkOption {
|
||||||
|
type = attrs;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
hyprIdle = {
|
||||||
|
lockScreenTimer = mkOption {
|
||||||
|
type = with types; null || signed integer || floating point number;
|
||||||
|
default = 5;
|
||||||
|
};
|
||||||
|
screenOffTimer = mkOption {
|
||||||
|
type = with types; null || signed integer || floating point number;
|
||||||
|
default = 15;
|
||||||
|
};
|
||||||
|
suspendTimer = mkOption {
|
||||||
|
type = with types; null || signed integer || floating point number;
|
||||||
|
default = 30;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/nixos/hyprland/environment.nix → modules/home/desktop/hyprland/packages.nix
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
box64
|
box64
|
||||||
brightnessctl
|
brightnessctl
|
||||||
ddcutil
|
ddcutil
|
||||||
@@ -32,8 +32,6 @@
|
|||||||
nautilus
|
nautilus
|
||||||
networkmanagerapplet
|
networkmanagerapplet
|
||||||
nm-tray
|
nm-tray
|
||||||
nwg-dock-hyprland
|
|
||||||
nwg-drawer
|
|
||||||
nwg-look
|
nwg-look
|
||||||
overskride
|
overskride
|
||||||
pamixer
|
pamixer
|
||||||
@@ -59,4 +57,4 @@
|
|||||||
xsettingsd
|
xsettingsd
|
||||||
xwayland
|
xwayland
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
41
modules/home/desktop/hyprland/services/hypridle/default.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../../options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.hypridle = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||||
|
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||||
|
ignore_dbus_inhibit = false;
|
||||||
|
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
|
||||||
|
};
|
||||||
|
listener = [
|
||||||
|
# {
|
||||||
|
# timeout = 300; # 5min
|
||||||
|
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
# on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||||
|
# }
|
||||||
|
{
|
||||||
|
timeout = cfg.hypridle.lockScreenTimer;
|
||||||
|
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = cfg.hypridle.screenOffTimer;
|
||||||
|
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||||
|
on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = cfg.hypridle.suspendTimer;
|
||||||
|
on-timeout = "systemctl suspend"; # suspend pc
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
47
modules/home/desktop/hyprland/services/hyprlock/default.nix
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../../options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
programs.hyprlock = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
background = [
|
||||||
|
{
|
||||||
|
monitor = "";
|
||||||
|
path = cfg.wallpaper; # supports png, jpg, webp (no animations, though)
|
||||||
|
color = "rgba(25, 20, 20, 1.0)";
|
||||||
|
|
||||||
|
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||||
|
blur_passes = "3"; # 0 disables blurring
|
||||||
|
blur_size = "7";
|
||||||
|
noise = "0.0117";
|
||||||
|
contrast = "0.8916";
|
||||||
|
brightness = "0.8172";
|
||||||
|
vibrancy = "0.1696";
|
||||||
|
vibrancy_darkness = "0.0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
input-field = [
|
||||||
|
{
|
||||||
|
size = "200, 50";
|
||||||
|
position = "0, -80";
|
||||||
|
monitor = cfg.primaryDisplay;
|
||||||
|
dots_center = true;
|
||||||
|
fade_on_empty = true;
|
||||||
|
font_color = "rgb(202, 211, 245)";
|
||||||
|
inner_color = "rgb(91, 96, 120)";
|
||||||
|
outer_color = "rgb(24, 25, 38)";
|
||||||
|
bothlock_color = -1;
|
||||||
|
outline_thickness = 5;
|
||||||
|
placeholder_text = ''<span foreground="##cad3f5">Password...</span>'';
|
||||||
|
shadow_passes = 2;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
18
modules/home/desktop/hyprland/services/hyprpaper/default.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../../options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.hyprpaper = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
preload = [ "/run/wallpaper.jpg" ];
|
||||||
|
wallpaper = "/run/wallpaper.jpg";
|
||||||
|
splash = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
93
modules/home/desktop/hyprland/theme.nix
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
themeSize = "compact"; # [ "standard" "compact" ]
|
||||||
|
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
|
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
|
||||||
|
themeColor = "dark"; # [ "standard" "light" "dark" ]
|
||||||
|
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
|
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]
|
||||||
|
|
||||||
|
# Cursor
|
||||||
|
cursorTheme = "macOS";
|
||||||
|
cursorThemePkg = pkgs.apple-cursor;
|
||||||
|
cursorSize = 24;
|
||||||
|
|
||||||
|
# GTK
|
||||||
|
gtkThemeSize = themeSize;
|
||||||
|
gtkThemeAccent = themeAccent;
|
||||||
|
gtkThemeVariant = themeVariant;
|
||||||
|
gtkThemeColor = themeColor;
|
||||||
|
gtkTheme = "Colloid-Dark-Compact-Nord";
|
||||||
|
gtkThemePkg = pkgs.colloid-gtk-theme.override {
|
||||||
|
sizeVariants = [ themeSize ];
|
||||||
|
colorVariants = [ themeColor ];
|
||||||
|
themeVariants = [ themeAccent ];
|
||||||
|
tweaks = [ themeVariant ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Icons
|
||||||
|
iconThemeScheme = iconScheme;
|
||||||
|
iconTheme = "Colloid-Nord-Dark";
|
||||||
|
iconThemePkg = pkgs.colloid-icon-theme.override {
|
||||||
|
schemeVariants = [ iconScheme ];
|
||||||
|
colorVariants = [ iconThemeVariant ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
fontName = "JetBrainsMono NFM";
|
||||||
|
fontPackage = pkgs.nerd-fonts.jetbrains-mono;
|
||||||
|
fontSize = 12;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home = {
|
||||||
|
pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
package = cursorThemePkg;
|
||||||
|
name = cursorTheme;
|
||||||
|
size = cursorSize;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dconf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
|
||||||
|
"org/gnome/desktop/interface".cursor-theme = cursorTheme;
|
||||||
|
"org/gnome/desktop/interface".gtk-theme = gtkTheme;
|
||||||
|
"org/gnome/desktop/interface".icon-theme = iconTheme;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
cursorTheme = {
|
||||||
|
name = cursorTheme;
|
||||||
|
package = cursorThemePkg;
|
||||||
|
};
|
||||||
|
|
||||||
|
theme = {
|
||||||
|
name = gtkTheme;
|
||||||
|
package = gtkThemePkg;
|
||||||
|
};
|
||||||
|
|
||||||
|
iconTheme = {
|
||||||
|
name = iconTheme;
|
||||||
|
package = iconThemePkg;
|
||||||
|
};
|
||||||
|
|
||||||
|
gtk3.extraConfig = {
|
||||||
|
gtk-application-prefer-dark-theme = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gtk4.extraConfig = {
|
||||||
|
gtk-application-prefer-dark-theme = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
font = {
|
||||||
|
name = fontName;
|
||||||
|
package = fontPackage;
|
||||||
|
size = fontSize;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
modules/home/desktop/hyprland/variables.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
sessionVariables = {
|
||||||
|
BROWSER = "${cfg.defaultApps.browser.pname}";
|
||||||
|
CLUTTER_BACKEND = "wayland";
|
||||||
|
EDITOR = "${cfg.defaultApps.editor.pname}";
|
||||||
|
VISUAL = "${cfg.defaultApps.visual.pname}";
|
||||||
|
ICON_THEME = settings.iconTheme;
|
||||||
|
GTK_CSD = "0";
|
||||||
|
GTK_THEME = settings.gtkTheme;
|
||||||
|
GTK_USE_PORTAL = "1";
|
||||||
|
HYPRCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name;
|
||||||
|
HYPRCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size;
|
||||||
|
MOZ_ENABLE_WAYLAND = "1";
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
NIXOS_XDG_OPEN_USE_PORTAL = "1";
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
||||||
|
QT_QPA_PLATFORM = "wayland-egl";
|
||||||
|
QT_QPA_PLATFORMTHEME = "gtk3";
|
||||||
|
QT_SCALE_FACTOR = "1";
|
||||||
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
||||||
|
SDL_VIDEODRIVER = "wayland";
|
||||||
|
TERMINAL = "${cfg.defaultApps.terminal.pname}";
|
||||||
|
XCURSOR_THEME = config.home-manager.users.matt.pointerCursor.name;
|
||||||
|
XCURSOR_SIZE = config.home-manager.users.matt.pointerCursor.size;
|
||||||
|
XDG_CACHE_HOME = "\${HOME}/.cache";
|
||||||
|
XDG_CONFIG_HOME = "\${HOME}/.config";
|
||||||
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
||||||
|
XDG_DATA_HOME = "\${HOME}/.local/share";
|
||||||
|
XDG_SESSION_DESKTOP = "Hyprland";
|
||||||
|
XDG_SESSION_TYPE = "wayland";
|
||||||
|
};
|
||||||
|
}
|
||||||
34
modules/home/desktop/theme/nord.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
# Nord colors
|
||||||
|
# Opacity Hex alpha
|
||||||
|
# 100% FF
|
||||||
|
# 75% BF
|
||||||
|
# 50% 80
|
||||||
|
# 25% 40
|
||||||
|
# 10% 1A
|
||||||
|
# 0% 00
|
||||||
|
polarNight = {
|
||||||
|
nord0 = "#2e3440";
|
||||||
|
nord1 = "#3b4252";
|
||||||
|
nord2 = "#434c5e";
|
||||||
|
nord3 = "#4c566a";
|
||||||
|
};
|
||||||
|
snowStorm = {
|
||||||
|
nord4 = "#d8dee9";
|
||||||
|
nord5 = "#e5e9f0";
|
||||||
|
nord6 = "#eceff4";
|
||||||
|
};
|
||||||
|
frost = {
|
||||||
|
nord7 = "#8fbcbb";
|
||||||
|
nord8 = "#88c0d0";
|
||||||
|
nord9 = "#81a1c1";
|
||||||
|
nord10 = "#5e81ac";
|
||||||
|
};
|
||||||
|
aurora = {
|
||||||
|
nord11 = "#bf616a";
|
||||||
|
nord12 = "#d08770";
|
||||||
|
nord13 = "#ebcb8b";
|
||||||
|
nord14 = "#a3be8c";
|
||||||
|
nord15 = "#b48ead";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 239 KiB After Width: | Height: | Size: 239 KiB |
@@ -1,62 +0,0 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
apple-cursor
|
|
||||||
colloid-icon-theme
|
|
||||||
colloid-gtk-theme
|
|
||||||
gnome-tweaks
|
|
||||||
gnomeExtensions.allow-locked-remote-desktop
|
|
||||||
gnomeExtensions.appindicator
|
|
||||||
gnomeExtensions.arcmenu
|
|
||||||
gnomeExtensions.bing-wallpaper-changer
|
|
||||||
gnomeExtensions.dash-to-dock
|
|
||||||
gnomeExtensions.dash-to-panel
|
|
||||||
gnomeExtensions.gsconnect
|
|
||||||
gnomeExtensions.random-wallpaper
|
|
||||||
gnomeExtensions.tiling-assistant
|
|
||||||
gnomeExtensions.user-themes
|
|
||||||
gnomeExtensions.wikiart-wallpaper
|
|
||||||
papirus-icon-theme
|
|
||||||
pop-gtk-theme
|
|
||||||
];
|
|
||||||
|
|
||||||
dconf = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface".clock-format = "12h";
|
|
||||||
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
|
|
||||||
"org/gnome/desktop/interface".cursor-theme = lib.mkDefault "macOS";
|
|
||||||
"org/gnome/desktop/interface".enable-hot-corners = false;
|
|
||||||
"org/gnome/desktop/interface".font-antialiasing = "grayscale";
|
|
||||||
"org/gnome/desktop/interface".font-hinting = "slight";
|
|
||||||
"org/gnome/desktop/interface".gtk-theme = lib.mkDefault "Colloid-Dark";
|
|
||||||
"org/gnome/desktop/interface".icon-theme = lib.mkDefault "Colloid-Dark";
|
|
||||||
"org/gnome/desktop/peripherals/mouse".accel-profile = "flat";
|
|
||||||
"org/gnome/desktop/peripherals/touchpad".two-finger-scrolling-enabled = true;
|
|
||||||
"org/gnome/desktop/peripherals/touchpad".tap-to-click = true;
|
|
||||||
"org/gnome/mutter".experimental-features = [
|
|
||||||
"scale-monitor-framebuffer"
|
|
||||||
"variable-refresh-rate"
|
|
||||||
];
|
|
||||||
"org/gnome/tweaks".show-extensions-notice = false;
|
|
||||||
"org/gnome/shell".enabled-extensions = [
|
|
||||||
"allowlockedremotedesktop@kamens.us"
|
|
||||||
"appindicatorsupport@rgcjonas.gmail.com"
|
|
||||||
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
|
||||||
"tiling-assistant@leleat-on-github"
|
|
||||||
"dash-to-dock@micxgx.gmail.com"
|
|
||||||
"BingWallpaper@ineffable-gmail.com"
|
|
||||||
"gsconnect@andyholmes.github.io"
|
|
||||||
];
|
|
||||||
"org/gnome/shell/extensions/bingwallpaper".override-lockscreen-blur = true;
|
|
||||||
"org/gnome/shell/extensions/bingwallpaper".random-mode-enabled = true;
|
|
||||||
"org/gnome/shell/extensions/bingwallpaper".revert-to-current-image = false;
|
|
||||||
"org/gnome/shell/extensions/dash-to-panel".primary-monitor = 1;
|
|
||||||
"org/gnome/shell/extensions/dash-to-panel".multi-monitors = false;
|
|
||||||
"org/gnome/shell/extensions/gsconnect".id = "4db35bd2-0dcd-42a3-9f77-ef3e8bb83182";
|
|
||||||
"org/gnome/shell/extensions/gsconnect".name = "matt-nixos";
|
|
||||||
"org/gnome/shell/extensions/user-theme".name = lib.mkDefault "Colloid-Dark";
|
|
||||||
"org/gtk/settings/file-chooser".clock-format = "12h";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
programs.librewolf = {
|
programs.librewolf = {
|
||||||
enable = true;
|
enable = false;
|
||||||
settings = {
|
settings = {
|
||||||
"identity.fxaccounts.enabled" = true; # Enable Firefox Accounts
|
"identity.fxaccounts.enabled" = true; # Enable Firefox Accounts
|
||||||
"privacy.clearOnShutdown.history" = false; # Disable clearing history on shutdown
|
"privacy.clearOnShutdown.history" = false; # Disable clearing history on shutdown
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
{ ... }:
|
{ lib, system, ... }:
|
||||||
|
let
|
||||||
|
isArm = builtins.match "aarch64*" system != null;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
programs.onlyoffice = {
|
programs.onlyoffice = {
|
||||||
enable = true;
|
enable = lib.mkDefault (!isArm);
|
||||||
settings = {
|
settings = {
|
||||||
UITheme = "theme-contrast-dark";
|
UITheme = "theme-contrast-dark";
|
||||||
forcedRtl = false;
|
forcedRtl = false;
|
||||||
18
modules/nixos/boot/lanzaboote/default.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{ config, lib, namespace, inputs, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.bootloader.lanzaboote;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
boot.lanzaboote = {
|
||||||
|
enable = cfg.enable;
|
||||||
|
pkiBundle = "/etc/secureboot";
|
||||||
|
settings = {
|
||||||
|
console-mode = "max";
|
||||||
|
};
|
||||||
|
configurationLimit = cfg.configLimit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
modules/nixos/boot/lanzaboote/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.bootloader.lanzaboote = {
|
||||||
|
enable = mkEnableOption "enable lanzaboote";
|
||||||
|
|
||||||
|
configLimit = mkOption {
|
||||||
|
type = with types; int;
|
||||||
|
default = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services = {
|
|
||||||
desktopManager.cosmic.enable = true;
|
|
||||||
displayManager.cosmic-greeter.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
specialisation.cosmic.configuration = {
|
|
||||||
imports = [ ./default.nix ];
|
|
||||||
environment.etc."specialisation".text = "cosmic";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
{
|
|
||||||
services = {
|
|
||||||
# Enable Desktop Environment.
|
|
||||||
desktopManager.gnome.enable = true;
|
|
||||||
# Enable Desktop Environment.
|
|
||||||
displayManager = {
|
|
||||||
gdm.enable = lib.mkDefault true;
|
|
||||||
gdm.wayland = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
gnome.gnome-remote-desktop.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
kdeconnect = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.gnomeExtensions.gsconnect;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
13
modules/nixos/desktop/cosmic/default.nix
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
{ config, lib, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.cosmic;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services = {
|
||||||
|
desktopManager.cosmic.enable = true;
|
||||||
|
displayManager.cosmic-greeter.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/nixos/desktop/cosmic/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.desktop.cosmic = {
|
||||||
|
enable = mkEnableOption "enable cosmic settings";
|
||||||
|
};
|
||||||
|
}
|
||||||
30
modules/nixos/desktop/gnome/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{ config, lib, pkgs, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.gnome;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../../../home/desktop/gnome/options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services = {
|
||||||
|
# Enable Desktop Environment.
|
||||||
|
desktopManager.gnome.enable = true;
|
||||||
|
# Enable Desktop Environment.
|
||||||
|
displayManager = {
|
||||||
|
gdm.enable = lib.mkDefault true;
|
||||||
|
gdm.wayland = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gnome.gnome-remote-desktop.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
kdeconnect = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.gnomeExtensions.gsconnect;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
171
modules/nixos/desktop/hyprland/default.nix
Executable file
@@ -0,0 +1,171 @@
|
|||||||
|
{ config, pkgs, lib, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
|
||||||
|
bing-wallpaper = pkgs.writeScriptBin "bing-wallpaper" ''
|
||||||
|
# Directory to store wallpapers
|
||||||
|
IMG_PATH="/run/wallpaper.jpg"
|
||||||
|
|
||||||
|
# Download if not already downloaded
|
||||||
|
URL=$(curl -s "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1" | \
|
||||||
|
jq -r '.images[0].url')
|
||||||
|
FULL_URL="https://www.bing.com$URL"
|
||||||
|
curl -s -o "$IMG_PATH" "$FULL_URL"
|
||||||
|
echo "Downloaded $FULL_URL to $IMG_PATH successfully"
|
||||||
|
'';
|
||||||
|
|
||||||
|
sddmThemeName = "sddm-astronaut-theme";
|
||||||
|
sddmThemePkg = pkgs.sddm-astronaut.override {
|
||||||
|
embeddedTheme = "astronaut";
|
||||||
|
themeConfig = {
|
||||||
|
Background = "/run/wallpaper.jpg";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../../../home/desktop/hyprland/options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
environment.systemPackages = [ bing-wallpaper pkgs.jq ];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
displayManager = {
|
||||||
|
sddm = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.kdePackages.sddm;
|
||||||
|
extraPackages = [ sddmThemePkg ];
|
||||||
|
theme = sddmThemeName;
|
||||||
|
wayland.enable = true;
|
||||||
|
settings = {
|
||||||
|
Theme = {
|
||||||
|
ThemeDir = "${sddmThemePkg}/share/sddm/themes";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Disable gdm
|
||||||
|
gdm.enable = lib.mkForce false;
|
||||||
|
defaultSession = "hyprland";
|
||||||
|
};
|
||||||
|
|
||||||
|
# disable other desktops
|
||||||
|
desktopManager = {
|
||||||
|
plasma6.enable = lib.mkForce false;
|
||||||
|
gnome.enable = lib.mkForce false;
|
||||||
|
};
|
||||||
|
|
||||||
|
dbus.enable = true;
|
||||||
|
|
||||||
|
ddccontrol.enable = false;
|
||||||
|
|
||||||
|
blueman.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
|
nm-applet.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
services = {
|
||||||
|
preload-bing-wallpaper = {
|
||||||
|
enable = true;
|
||||||
|
wants = [ "network-online.target" ];
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
before = [ "display-manager.service" ];
|
||||||
|
requiredBy = [
|
||||||
|
"plymouth-quit-wait.service"
|
||||||
|
"display-manager.service"
|
||||||
|
];
|
||||||
|
wantedBy = [ "display-manager.service" ];
|
||||||
|
path = [
|
||||||
|
pkgs.bash
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.curl
|
||||||
|
bing-wallpaper
|
||||||
|
];
|
||||||
|
script = ''
|
||||||
|
bing-wallpaper
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
user = {
|
||||||
|
services = {
|
||||||
|
reload-bing-wallpaper = {
|
||||||
|
enable = true;
|
||||||
|
path = [
|
||||||
|
pkgs.bash
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.curl
|
||||||
|
pkgs.hyprland
|
||||||
|
bing-wallpaper
|
||||||
|
];
|
||||||
|
script = ''
|
||||||
|
bing-wallpaper
|
||||||
|
${pkgs.hyprland}/bin/hyprctl hyprpaper reload ,/run/wallpaper
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Create a timer to run the service periodically
|
||||||
|
timers = {
|
||||||
|
reload-bing-wallpaper = {
|
||||||
|
description = "Timer for reload-bing-wallpaper";
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
|
||||||
|
# Timer configuration
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "daily"; # Check every day
|
||||||
|
Persistent = true; # Run immediately if last run was missed
|
||||||
|
Unit = "reload-bing-wallpaper.service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
DefaultTimeoutStopSec=10s
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
security = {
|
||||||
|
polkit.enable = true;
|
||||||
|
|
||||||
|
# configure sudo
|
||||||
|
sudo.extraRules = [
|
||||||
|
{
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/waybar-weather";
|
||||||
|
options = [ "NOPASSWD" ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/waybar-updates";
|
||||||
|
options = [ "NOPASSWD" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
groups = [ "wheel" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
wlr.enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = [
|
||||||
|
pkgs.xdg-desktop-portal-hyprland
|
||||||
|
pkgs.xdg-desktop-portal-gnome
|
||||||
|
pkgs.xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
15
modules/nixos/fonts/default.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{ lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
font-awesome
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-color-emoji
|
||||||
|
meslo-lgs-nf
|
||||||
|
] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
||||||
|
|
||||||
|
fonts.fontconfig.defaultFonts = {
|
||||||
|
emoji = [
|
||||||
|
"Noto Color Emoji"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/nixos/hardware/default.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ lib, system, ... }:
|
||||||
|
let
|
||||||
|
isArm = builtins.match "aarch64*" system != null;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
hardware = {
|
||||||
|
# Bluetooth
|
||||||
|
bluetooth.enable = lib.mkDefault true;
|
||||||
|
|
||||||
|
i2c.enable = lib.mkDefault true;
|
||||||
|
|
||||||
|
# Enable all firmware
|
||||||
|
enableAllFirmware = lib.mkForce true;
|
||||||
|
|
||||||
|
# Enable graphics
|
||||||
|
graphics = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
enable32Bit = lib.mkDefault (!isArm);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
- id: '1740678838632'
|
|
||||||
alias: Bedroom Light Switch
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: 8b3a5a5b6faaba744c70ee940446a8af
|
|
||||||
type: action
|
|
||||||
subtype: on-press
|
|
||||||
trigger: device
|
|
||||||
id: on press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: 8b3a5a5b6faaba744c70ee940446a8af
|
|
||||||
type: action
|
|
||||||
subtype: off-press
|
|
||||||
trigger: device
|
|
||||||
id: off press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: 8b3a5a5b6faaba744c70ee940446a8af
|
|
||||||
type: action
|
|
||||||
subtype: up-press
|
|
||||||
trigger: device
|
|
||||||
id: up press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: 8b3a5a5b6faaba744c70ee940446a8af
|
|
||||||
type: action
|
|
||||||
subtype: down-press
|
|
||||||
trigger: device
|
|
||||||
id: down press
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- on press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
brightness_pct: 100
|
|
||||||
kelvin: 6004
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- off press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_off
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- up press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
brightness_step_pct: 10
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- down press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
brightness_step_pct: -10
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
mode: single
|
|
||||||
- id: '1740697291423'
|
|
||||||
alias: Living Rooom Lights
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: b4fb325dfe68d4f80391417998f35843
|
|
||||||
type: action
|
|
||||||
subtype: on-press
|
|
||||||
trigger: device
|
|
||||||
id: on press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: b4fb325dfe68d4f80391417998f35843
|
|
||||||
type: action
|
|
||||||
subtype: off-press
|
|
||||||
trigger: device
|
|
||||||
id: off press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: b4fb325dfe68d4f80391417998f35843
|
|
||||||
type: action
|
|
||||||
subtype: up-press
|
|
||||||
trigger: device
|
|
||||||
id: up press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: b4fb325dfe68d4f80391417998f35843
|
|
||||||
type: action
|
|
||||||
subtype: down-press
|
|
||||||
trigger: device
|
|
||||||
id: down press
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: b4fb325dfe68d4f80391417998f35843
|
|
||||||
type: action
|
|
||||||
subtype: on-hold
|
|
||||||
trigger: device
|
|
||||||
id: on-hold
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- on press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
brightness_pct: 100
|
|
||||||
kelvin: 6004
|
|
||||||
target:
|
|
||||||
entity_id:
|
|
||||||
- light.living_room_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- off press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_off
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
target:
|
|
||||||
entity_id:
|
|
||||||
- light.living_room_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- up press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
brightness_step_pct: 10
|
|
||||||
target:
|
|
||||||
entity_id: light.living_room_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- down press
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
brightness_step_pct: -10
|
|
||||||
target:
|
|
||||||
entity_id: light.living_room_light_1
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- on-hold
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 0
|
|
||||||
brightness_pct: 100
|
|
||||||
rgb_color:
|
|
||||||
- 224
|
|
||||||
- 27
|
|
||||||
- 36
|
|
||||||
target:
|
|
||||||
entity_id: light.living_room_lights
|
|
||||||
mode: single
|
|
||||||
- id: '1741048414771'
|
|
||||||
alias: Front Closet
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- type: present
|
|
||||||
device_id: c6519ea1e715f397dbbf7b73452f9e49
|
|
||||||
entity_id: c3a7b8892b8b372d2c40556e770ddc68
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
for:
|
|
||||||
hours: 0
|
|
||||||
minutes: 0
|
|
||||||
seconds: 0
|
|
||||||
id: present
|
|
||||||
- type: not_present
|
|
||||||
device_id: c6519ea1e715f397dbbf7b73452f9e49
|
|
||||||
entity_id: c3a7b8892b8b372d2c40556e770ddc68
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
for:
|
|
||||||
hours: 0
|
|
||||||
minutes: 0
|
|
||||||
seconds: 5
|
|
||||||
id: not
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- present
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
brightness_pct: 100
|
|
||||||
kelvin: 6010
|
|
||||||
target:
|
|
||||||
entity_id:
|
|
||||||
- light.front_closet_light_1
|
|
||||||
- light.front_closet_light_2
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- not
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_off
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 2
|
|
||||||
target:
|
|
||||||
entity_id:
|
|
||||||
- light.front_closet_light_1
|
|
||||||
- light.front_closet_light_2
|
|
||||||
mode: single
|
|
||||||
@@ -1,576 +0,0 @@
|
|||||||
- id: '1692388103102'
|
|
||||||
alias: Weekly Backup
|
|
||||||
description: Create a full backup every Sunday at 3 am and store it on the NAS
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: 03:00:00
|
|
||||||
condition:
|
|
||||||
- condition: time
|
|
||||||
weekday:
|
|
||||||
- sun
|
|
||||||
action:
|
|
||||||
- service: hassio.backup_full
|
|
||||||
data:
|
|
||||||
compressed: true
|
|
||||||
mode: single
|
|
||||||
- id: '1692389901297'
|
|
||||||
alias: Livingroom Lights
|
|
||||||
description: ''
|
|
||||||
trigger:
|
|
||||||
- platform: device
|
|
||||||
domain: mqtt
|
|
||||||
device_id: 37d42431de65199af00220b43dae04c1
|
|
||||||
type: action
|
|
||||||
subtype: on_press
|
|
||||||
id: 'on'
|
|
||||||
- platform: device
|
|
||||||
domain: mqtt
|
|
||||||
device_id: 37d42431de65199af00220b43dae04c1
|
|
||||||
type: action
|
|
||||||
subtype: off_press
|
|
||||||
id: 'off'
|
|
||||||
- platform: device
|
|
||||||
domain: mqtt
|
|
||||||
device_id: 37d42431de65199af00220b43dae04c1
|
|
||||||
type: action
|
|
||||||
subtype: up_press
|
|
||||||
id: up
|
|
||||||
- platform: device
|
|
||||||
domain: mqtt
|
|
||||||
device_id: 37d42431de65199af00220b43dae04c1
|
|
||||||
type: action
|
|
||||||
subtype: down_press
|
|
||||||
id: down
|
|
||||||
- platform: device
|
|
||||||
domain: mqtt
|
|
||||||
device_id: 37d42431de65199af00220b43dae04c1
|
|
||||||
type: action
|
|
||||||
subtype: on_hold
|
|
||||||
id: hold
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'on'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_pct: 100
|
|
||||||
color_temp_kelvin: 5000
|
|
||||||
transition: 1
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'off'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
transition: 1
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
action: light.turn_off
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- hold
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_pct: 100
|
|
||||||
rgb_color:
|
|
||||||
- 255
|
|
||||||
- 38
|
|
||||||
- 0
|
|
||||||
transition: 1
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- dim up
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_step_pct: 20
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- dim down
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_step_pct: -20
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
mode: single
|
|
||||||
- id: '1692390365798'
|
|
||||||
alias: Bedroom Lights
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: a492c0abb8f14e0888df08101f77f484
|
|
||||||
type: action
|
|
||||||
subtype: off_press
|
|
||||||
id: 'off'
|
|
||||||
trigger: device
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: a492c0abb8f14e0888df08101f77f484
|
|
||||||
type: action
|
|
||||||
subtype: on_press
|
|
||||||
id: 'on'
|
|
||||||
trigger: device
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: a492c0abb8f14e0888df08101f77f484
|
|
||||||
type: action
|
|
||||||
subtype: up_press
|
|
||||||
id: up
|
|
||||||
trigger: device
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: a492c0abb8f14e0888df08101f77f484
|
|
||||||
type: action
|
|
||||||
subtype: down_press
|
|
||||||
id: down
|
|
||||||
trigger: device
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: a492c0abb8f14e0888df08101f77f484
|
|
||||||
type: action
|
|
||||||
subtype: on_hold
|
|
||||||
id: hold on
|
|
||||||
trigger: device
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'on'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_pct: 100
|
|
||||||
color_temp_kelvin: 5000
|
|
||||||
transition: 1
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'off'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
transition: 1
|
|
||||||
target:
|
|
||||||
entity_id:
|
|
||||||
- light.bedroom_lights
|
|
||||||
action: light.turn_off
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- up
|
|
||||||
sequence:
|
|
||||||
- device_id: 171fa001578683249ff26f2d85817fef
|
|
||||||
domain: light
|
|
||||||
entity_id: 55d41329665f60a55a732c5bbececd22
|
|
||||||
type: brightness_increase
|
|
||||||
- device_id: c92fea3d569ca668e6617a189f917a28
|
|
||||||
domain: light
|
|
||||||
entity_id: 0c8630c2b37ae9615f9cf815aaebf40f
|
|
||||||
type: brightness_increase
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- down
|
|
||||||
sequence:
|
|
||||||
- device_id: 171fa001578683249ff26f2d85817fef
|
|
||||||
domain: light
|
|
||||||
entity_id: 55d41329665f60a55a732c5bbececd22
|
|
||||||
type: brightness_decrease
|
|
||||||
- device_id: c92fea3d569ca668e6617a189f917a28
|
|
||||||
domain: light
|
|
||||||
entity_id: 0c8630c2b37ae9615f9cf815aaebf40f
|
|
||||||
type: brightness_decrease
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- hold on
|
|
||||||
sequence:
|
|
||||||
- metadata: {}
|
|
||||||
data:
|
|
||||||
rgb_color:
|
|
||||||
- 255
|
|
||||||
- 0
|
|
||||||
- 0
|
|
||||||
brightness_pct: 100
|
|
||||||
target:
|
|
||||||
entity_id: light.bedroom_lights
|
|
||||||
action: light.turn_on
|
|
||||||
mode: single
|
|
||||||
- id: '1694441037420'
|
|
||||||
alias: Air Purifier Schedule
|
|
||||||
description: ''
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: 07:00:00
|
|
||||||
id: fan off
|
|
||||||
- platform: time
|
|
||||||
at: '23:00:00'
|
|
||||||
id: fan on
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- fan on
|
|
||||||
sequence:
|
|
||||||
- service: fan.set_percentage
|
|
||||||
data:
|
|
||||||
percentage: 100
|
|
||||||
target:
|
|
||||||
entity_id: fan.bedroom_air_purifier
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- fan off
|
|
||||||
sequence:
|
|
||||||
- service: fan.set_preset_mode
|
|
||||||
data:
|
|
||||||
preset_mode: auto
|
|
||||||
target:
|
|
||||||
entity_id: fan.bedroom_air_purifier
|
|
||||||
mode: single
|
|
||||||
- id: '1705949582146'
|
|
||||||
alias: Ice Maker Power Schedule
|
|
||||||
description: ''
|
|
||||||
trigger:
|
|
||||||
- platform: time_pattern
|
|
||||||
hours: '*'
|
|
||||||
minutes: '0'
|
|
||||||
seconds: '0'
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- type: toggle
|
|
||||||
device_id: 41c66532e23aadc4c6ac95e520e5d345
|
|
||||||
entity_id: bd17ac75a91e62ed7e6b148cfe33d43d
|
|
||||||
domain: switch
|
|
||||||
- alias: Set Ice Maker Light to Dim
|
|
||||||
device_id: 41c66532e23aadc4c6ac95e520e5d345
|
|
||||||
domain: select
|
|
||||||
entity_id: 8f4f90c62b00df9008d14f7ce8967199
|
|
||||||
type: select_option
|
|
||||||
option: 'On'
|
|
||||||
mode: single
|
|
||||||
- id: '1708978401738'
|
|
||||||
alias: Soundbar
|
|
||||||
description: ''
|
|
||||||
trigger: []
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- service: media_player.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data: {}
|
|
||||||
target:
|
|
||||||
entity_id: media_player.soundbar
|
|
||||||
- service: media_player.select_source
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
source: wifi
|
|
||||||
target:
|
|
||||||
entity_id: media_player.soundbar
|
|
||||||
- service: media_player.play_media
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
media_content_id: media-source://radio_browser/2eff3a1f-b821-4267-9f37-f8d7e72061e4
|
|
||||||
media_content_type: audio/mpeg
|
|
||||||
target:
|
|
||||||
entity_id: media_player.soundbar
|
|
||||||
mode: single
|
|
||||||
- id: '1711147285926'
|
|
||||||
alias: Grow Light Schedule
|
|
||||||
description: ''
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: 07:00:00
|
|
||||||
id: day
|
|
||||||
- platform: time
|
|
||||||
at: '20:00:00'
|
|
||||||
id: night
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- day
|
|
||||||
sequence:
|
|
||||||
- service: switch.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data: {}
|
|
||||||
target:
|
|
||||||
entity_id: switch.grow_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- night
|
|
||||||
sequence:
|
|
||||||
- service: switch.turn_off
|
|
||||||
metadata: {}
|
|
||||||
data: {}
|
|
||||||
target:
|
|
||||||
entity_id: switch.grow_lights
|
|
||||||
mode: single
|
|
||||||
- id: '1723142554607'
|
|
||||||
alias: Restart Luci's Box
|
|
||||||
description: for some reason this box sucks and needs to get reboot periodically
|
|
||||||
trigger:
|
|
||||||
- platform: time_pattern
|
|
||||||
hours: '*'
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- type: turn_off
|
|
||||||
device_id: e7f8974c31567dddbbffb036fe8381bc
|
|
||||||
entity_id: e1e71e4acdfcbb6c4afdc174807ad8be
|
|
||||||
domain: switch
|
|
||||||
- delay:
|
|
||||||
hours: 0
|
|
||||||
minutes: 0
|
|
||||||
seconds: 1
|
|
||||||
milliseconds: 0
|
|
||||||
- type: turn_on
|
|
||||||
device_id: e7f8974c31567dddbbffb036fe8381bc
|
|
||||||
entity_id: e1e71e4acdfcbb6c4afdc174807ad8be
|
|
||||||
domain: switch
|
|
||||||
- type: turn_on
|
|
||||||
device_id: d5eb3c182a1ef2a231b94b09c26aed45
|
|
||||||
entity_id: 7106df7ebde274ac4bc2b197d5c45bea
|
|
||||||
domain: fan
|
|
||||||
- device_id: d5eb3c182a1ef2a231b94b09c26aed45
|
|
||||||
domain: number
|
|
||||||
entity_id: 59a7cd3cb2883bf6002f789c2ff4824c
|
|
||||||
type: set_value
|
|
||||||
value: 3
|
|
||||||
mode: single
|
|
||||||
- id: '1724707092916'
|
|
||||||
alias: HASS Updates
|
|
||||||
description: ''
|
|
||||||
use_blueprint:
|
|
||||||
path: edwardtfn/auto_update_scheduled.yaml
|
|
||||||
input:
|
|
||||||
schedule_entity: schedule.updates
|
|
||||||
restart_bool: true
|
|
||||||
- id: '1724707291994'
|
|
||||||
alias: IOT Battery Checker
|
|
||||||
description: ''
|
|
||||||
use_blueprint:
|
|
||||||
path: sbyx/low-battery-level-detection-notification-for-all-battery-sensors.yaml
|
|
||||||
input:
|
|
||||||
exclude:
|
|
||||||
entity_id: []
|
|
||||||
device_id:
|
|
||||||
- 66e9cee67a740e8925dae5fc9ce940f0
|
|
||||||
- df76e3a3e48b49e13bd3006350826740
|
|
||||||
actions:
|
|
||||||
- action: notify.persistent_notification
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
message: Device Battery Low
|
|
||||||
- id: '1729708621620'
|
|
||||||
alias: Closet Lights
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- type: present
|
|
||||||
device_id: 0924cbdcd24416e768caa52301db59f7
|
|
||||||
entity_id: e9f0acef50550033cd96155bd501b7c3
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
for:
|
|
||||||
hours: 0
|
|
||||||
minutes: 0
|
|
||||||
seconds: 0
|
|
||||||
id: Present
|
|
||||||
- type: not_present
|
|
||||||
device_id: 0924cbdcd24416e768caa52301db59f7
|
|
||||||
entity_id: e9f0acef50550033cd96155bd501b7c3
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
for:
|
|
||||||
hours: 0
|
|
||||||
minutes: 0
|
|
||||||
seconds: 0
|
|
||||||
id: empty
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- Present
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_on
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 3
|
|
||||||
brightness_pct: 100
|
|
||||||
kelvin: 5008
|
|
||||||
target:
|
|
||||||
device_id:
|
|
||||||
- e25128ac8fcf62af66a039cde3104760
|
|
||||||
- ddcfd5ea4fc5f5a88e18325b01c615db
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- empty
|
|
||||||
sequence:
|
|
||||||
- action: light.turn_off
|
|
||||||
metadata: {}
|
|
||||||
data:
|
|
||||||
transition: 3
|
|
||||||
target:
|
|
||||||
device_id:
|
|
||||||
- e25128ac8fcf62af66a039cde3104760
|
|
||||||
- ddcfd5ea4fc5f5a88e18325b01c615db
|
|
||||||
mode: single
|
|
||||||
- id: '1729881464325'
|
|
||||||
alias: Bedroom Closet
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- type: present
|
|
||||||
device_id: 28e7f211c72409fe244183219abf6ffa
|
|
||||||
entity_id: aa474f323868586cef62070654f36936
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
id: Present
|
|
||||||
- type: not_present
|
|
||||||
device_id: 28e7f211c72409fe244183219abf6ffa
|
|
||||||
entity_id: aa474f323868586cef62070654f36936
|
|
||||||
domain: binary_sensor
|
|
||||||
trigger: device
|
|
||||||
id: empty
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- Present
|
|
||||||
sequence:
|
|
||||||
- type: turn_on
|
|
||||||
device_id: f5936d6143b7927433e9c0430c79acab
|
|
||||||
entity_id: f6ec42c9db2c191866a335a346b1ec44
|
|
||||||
domain: switch
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- empty
|
|
||||||
sequence:
|
|
||||||
- type: turn_off
|
|
||||||
device_id: f5936d6143b7927433e9c0430c79acab
|
|
||||||
entity_id: f6ec42c9db2c191866a335a346b1ec44
|
|
||||||
domain: switch
|
|
||||||
mode: single
|
|
||||||
- id: '1740179328446'
|
|
||||||
alias: Living Room Lights
|
|
||||||
description: ''
|
|
||||||
triggers:
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: f7482a462dc7cc05b4ceaa0d882dc469
|
|
||||||
type: action
|
|
||||||
subtype: off_press
|
|
||||||
trigger: device
|
|
||||||
id: 'off'
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: f7482a462dc7cc05b4ceaa0d882dc469
|
|
||||||
type: action
|
|
||||||
subtype: on_press
|
|
||||||
trigger: device
|
|
||||||
id: 'on'
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: f7482a462dc7cc05b4ceaa0d882dc469
|
|
||||||
type: action
|
|
||||||
subtype: up_press
|
|
||||||
trigger: device
|
|
||||||
id: up
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: f7482a462dc7cc05b4ceaa0d882dc469
|
|
||||||
type: action
|
|
||||||
subtype: down_press
|
|
||||||
trigger: device
|
|
||||||
id: down
|
|
||||||
- domain: mqtt
|
|
||||||
device_id: f7482a462dc7cc05b4ceaa0d882dc469
|
|
||||||
type: action
|
|
||||||
subtype: on_hold
|
|
||||||
trigger: device
|
|
||||||
id: hold on
|
|
||||||
conditions: []
|
|
||||||
actions:
|
|
||||||
- choose:
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'on'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
brightness_pct: 100
|
|
||||||
color_temp_kelvin: 5000
|
|
||||||
transition: 1
|
|
||||||
action: light.turn_on
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- 'off'
|
|
||||||
sequence:
|
|
||||||
- data:
|
|
||||||
transition: 1
|
|
||||||
action: light.turn_off
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- up
|
|
||||||
sequence:
|
|
||||||
- device_id: 8bc2033b03d5a474ca3204c5ca53e308
|
|
||||||
domain: light
|
|
||||||
entity_id: 4a3cc9043ff985e9271683e1916bd9e1
|
|
||||||
type: brightness_increase
|
|
||||||
- device_id: 8f4f51aed9b3b4284f520af25358efd9
|
|
||||||
domain: light
|
|
||||||
entity_id: f45e74498c4b6bae65aaf5adf67e29d6
|
|
||||||
type: brightness_increase
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- down
|
|
||||||
sequence:
|
|
||||||
- device_id: 8bc2033b03d5a474ca3204c5ca53e308
|
|
||||||
domain: light
|
|
||||||
entity_id: 4a3cc9043ff985e9271683e1916bd9e1
|
|
||||||
type: brightness_decrease
|
|
||||||
- device_id: 8bc2033b03d5a474ca3204c5ca53e308
|
|
||||||
domain: light
|
|
||||||
entity_id: 4a3cc9043ff985e9271683e1916bd9e1
|
|
||||||
type: brightness_decrease
|
|
||||||
- conditions:
|
|
||||||
- condition: trigger
|
|
||||||
id:
|
|
||||||
- hold on
|
|
||||||
sequence:
|
|
||||||
- metadata: {}
|
|
||||||
data:
|
|
||||||
rgb_color:
|
|
||||||
- 255
|
|
||||||
- 0
|
|
||||||
- 0
|
|
||||||
brightness_pct: 100
|
|
||||||
action: light.turn_on
|
|
||||||
target:
|
|
||||||
entity_id: light.livingroom_lights
|
|
||||||
mode: single
|
|
||||||
399
modules/nixos/homeassistant/default.nix
Executable file
@@ -0,0 +1,399 @@
|
|||||||
|
{ config, lib, pkgs, namespace, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.services.home-assistant;
|
||||||
|
mosquittoPort = 1883;
|
||||||
|
zigbee2mqttPort = 8080;
|
||||||
|
|
||||||
|
# In configuration.nix or a separate file
|
||||||
|
python-steam = pkgs.python3Packages.buildPythonPackage rec {
|
||||||
|
pname = "steam";
|
||||||
|
version = "1.4.4";
|
||||||
|
pyproject = false;
|
||||||
|
src = pkgs.fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "sha256-K1vWkRwNSnMS9EG40WK52NR8i+u478bIhnOTsDI/pS4=";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = with pkgs.python3Packages; [ setuptools ];
|
||||||
|
|
||||||
|
doCheck = false; # no tests in the PyPI tarball
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
# imports = [ ./hacs ];
|
||||||
|
|
||||||
|
services.home-assistant = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
configDir = "/var/lib/homeassistant";
|
||||||
|
configWritable = true; # todo
|
||||||
|
extraComponents = [
|
||||||
|
"adguard"
|
||||||
|
"apple_tv"
|
||||||
|
"analytics"
|
||||||
|
"bluetooth"
|
||||||
|
"bluetooth_adapters"
|
||||||
|
"bluetooth_le_tracker"
|
||||||
|
"bluetooth_tracker"
|
||||||
|
"brother"
|
||||||
|
"caldav"
|
||||||
|
"calendar"
|
||||||
|
"cloudflare"
|
||||||
|
"co2signal"
|
||||||
|
"color_extractor"
|
||||||
|
"holiday"
|
||||||
|
"jellyfin"
|
||||||
|
"music_assistant"
|
||||||
|
"nut"
|
||||||
|
"nextcloud"
|
||||||
|
"nws"
|
||||||
|
"ollama"
|
||||||
|
"onedrive"
|
||||||
|
"ping"
|
||||||
|
"samsungtv"
|
||||||
|
"season"
|
||||||
|
"simplefin"
|
||||||
|
"smartthings"
|
||||||
|
"upnp"
|
||||||
|
"workday"
|
||||||
|
"wyoming"
|
||||||
|
|
||||||
|
"google_translate"
|
||||||
|
"met"
|
||||||
|
"radio_browser"
|
||||||
|
"shopping_list"
|
||||||
|
"esphome"
|
||||||
|
# Recommended for fast zlib compression
|
||||||
|
# https://www.home-assistant.io/integrations/isal
|
||||||
|
"isal"
|
||||||
|
"subaru"
|
||||||
|
"vesync"
|
||||||
|
"mqtt" # Enables MQTT integration in HA
|
||||||
|
"ffmpeg" # Enables camera streams
|
||||||
|
"zha" # Enables Zigbee integration
|
||||||
|
"homekit"
|
||||||
|
"music_assistant"
|
||||||
|
];
|
||||||
|
customComponents = with pkgs.home-assistant-custom-components; [
|
||||||
|
auth-header
|
||||||
|
localtuya
|
||||||
|
];
|
||||||
|
customLovelaceModules = with pkgs.home-assistant-custom-lovelace-modules; [
|
||||||
|
atomic-calendar-revive
|
||||||
|
bubble-card
|
||||||
|
button-card
|
||||||
|
hourly-weather
|
||||||
|
mini-graph-card
|
||||||
|
mini-media-player
|
||||||
|
multiple-entity-row
|
||||||
|
mushroom
|
||||||
|
vacuum-card
|
||||||
|
weather-chart-card
|
||||||
|
zigbee2mqtt-networkmap
|
||||||
|
];
|
||||||
|
# use postgresql instead of sqlite
|
||||||
|
extraPackages = ps: with ps; [
|
||||||
|
# Core functionality
|
||||||
|
aiohttp
|
||||||
|
aiodns
|
||||||
|
paho-mqtt
|
||||||
|
pillow
|
||||||
|
pytz
|
||||||
|
pyyaml
|
||||||
|
sqlalchemy
|
||||||
|
|
||||||
|
# Discovery & networking
|
||||||
|
zeroconf
|
||||||
|
netdisco
|
||||||
|
ifaddr
|
||||||
|
ssdp
|
||||||
|
|
||||||
|
# Device protocols
|
||||||
|
pyserial # Serial communications
|
||||||
|
bluepy # Bluetooth LE
|
||||||
|
|
||||||
|
# Smart home ecosystems
|
||||||
|
mutagen # Media file metadata
|
||||||
|
pysonos # Sonos
|
||||||
|
pywemo # Belkin WeMo
|
||||||
|
python-miio # Xiaomi devices
|
||||||
|
python-kasa # TP-Link
|
||||||
|
|
||||||
|
# Sensors & monitoring
|
||||||
|
meteocalc # Weather calculations
|
||||||
|
speedtest-cli # Internet speed
|
||||||
|
|
||||||
|
# Visualization & UI
|
||||||
|
matplotlib # Graphing
|
||||||
|
|
||||||
|
# Security
|
||||||
|
bcrypt
|
||||||
|
cryptography
|
||||||
|
pyjwt
|
||||||
|
|
||||||
|
# Media
|
||||||
|
ha-ffmpeg # Camera streams
|
||||||
|
|
||||||
|
# Specialized integrations
|
||||||
|
python-matter-server # Matter protocol
|
||||||
|
|
||||||
|
# System integrations
|
||||||
|
psutil # System monitoring
|
||||||
|
|
||||||
|
psycopg2
|
||||||
|
numpy
|
||||||
|
hassil
|
||||||
|
pyturbojpeg
|
||||||
|
paho-mqtt
|
||||||
|
pychromecast
|
||||||
|
pyatv
|
||||||
|
python-otbr-api
|
||||||
|
brother
|
||||||
|
pyipp
|
||||||
|
govee-ble
|
||||||
|
adguardhome
|
||||||
|
nextcord
|
||||||
|
aiogithubapi
|
||||||
|
jellyfin-apiclient-python
|
||||||
|
pylitterbot
|
||||||
|
dateparser
|
||||||
|
aionut
|
||||||
|
nextcloudmonitor
|
||||||
|
ollama
|
||||||
|
pynecil
|
||||||
|
aiopyarr
|
||||||
|
pysabnzbd
|
||||||
|
getmac
|
||||||
|
zigpy
|
||||||
|
bellows # For Zigbee EmberZNet-based adapters
|
||||||
|
zigpy-xbee # For XBee adapters
|
||||||
|
zigpy-deconz # For ConBee/RaspBee adapters
|
||||||
|
pyicloud # iCloud
|
||||||
|
pyatv # Apple TV
|
||||||
|
opencv-python
|
||||||
|
face-recognition
|
||||||
|
ibeacon-ble
|
||||||
|
gehomesdk
|
||||||
|
onedrive-personal-sdk
|
||||||
|
python-roborock
|
||||||
|
python-steam
|
||||||
|
apple-weatherkit
|
||||||
|
|
||||||
|
samsungctl
|
||||||
|
samsungtvws
|
||||||
|
|
||||||
|
aiohomekit
|
||||||
|
|
||||||
|
icmplib
|
||||||
|
aioelectricitymaps
|
||||||
|
wyoming
|
||||||
|
pysmartthings
|
||||||
|
wakeonlan
|
||||||
|
ephem
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
# Includes dependencies for a basic setup
|
||||||
|
# https://www.home-assistant.io/integrations/default_config/
|
||||||
|
default_config = {};
|
||||||
|
|
||||||
|
cloud = false;
|
||||||
|
|
||||||
|
frontend = {
|
||||||
|
themes = "!include_dir_merge_named themes";
|
||||||
|
};
|
||||||
|
|
||||||
|
"automation ui" = "!include automations.yaml";
|
||||||
|
"scene ui" = "!include scenes.yaml";
|
||||||
|
"script ui" = "!include scripts.yaml";
|
||||||
|
|
||||||
|
http = {
|
||||||
|
use_x_forwarded_for = true;
|
||||||
|
trusted_proxies = [
|
||||||
|
"172.30.33.0/24"
|
||||||
|
"10.0.1.4"
|
||||||
|
"10.0.4.2"
|
||||||
|
"10.0.1.18"
|
||||||
|
"10.0.1.0/24"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
recorder = {
|
||||||
|
db_url = "postgresql://@/hass";
|
||||||
|
purge_keep_days = 180;
|
||||||
|
};
|
||||||
|
|
||||||
|
auth_header = {
|
||||||
|
debug = false;
|
||||||
|
username_header = "X-authentik-username";
|
||||||
|
};
|
||||||
|
|
||||||
|
# https://www.home-assistant.io/integrations/ota_updater/
|
||||||
|
zha.zigpy_config.ota.z2m_remote_index = "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# https://www.home-assistant.io/integrations/automation/
|
||||||
|
# systemd.tmpfiles.rules = [
|
||||||
|
# "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass"
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# This bypasses the component validation and places it directly in HA's data directory
|
||||||
|
system.activationScripts.installCustomComponents = ''
|
||||||
|
chown -R hass:hass ${config.services.home-assistant.configDir}
|
||||||
|
chmod -R 750 ${config.services.home-assistant.configDir}
|
||||||
|
'';
|
||||||
|
|
||||||
|
services = {
|
||||||
|
postgresql = {
|
||||||
|
enable = true;
|
||||||
|
ensureDatabases = [ "hass" ];
|
||||||
|
ensureUsers = [{
|
||||||
|
name = "hass";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable and configure Mosquitto MQTT broker
|
||||||
|
mosquitto = {
|
||||||
|
enable = true;
|
||||||
|
listeners = [
|
||||||
|
{
|
||||||
|
acl = [ "pattern readwrite #" ];
|
||||||
|
omitPasswordAuth = true;
|
||||||
|
settings.allow_anonymous = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
zigbee2mqtt = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
homeassistant = {
|
||||||
|
enabled = config.services.home-assistant.enable;
|
||||||
|
# Optional: Home Assistant discovery topic (default: shown below)
|
||||||
|
# Note: should be different from [MQTT base topic](../mqtt.md) to prevent errors in HA software
|
||||||
|
discovery_topic = "homeassistant";
|
||||||
|
# Optional: Home Assistant status topic (default: shown below)
|
||||||
|
status_topic = "homeassistant/status";
|
||||||
|
# Optional: Experimental support for Home Assistant event entities, may break in the future (default: shown below) when enabled:
|
||||||
|
# - An `event` entity will be discovered for each 'action'.
|
||||||
|
# - The `event_type` attribute will contain the action itself, additional attributes like `button` will have further information.
|
||||||
|
experimental_event_entities = false;
|
||||||
|
# Optional: Home Assistant legacy action sensor (default: `false`), when enabled:
|
||||||
|
# - Zigbee2MQTT will send an empty 'action' after one has been send
|
||||||
|
# - A 'sensor_action' will be discovered
|
||||||
|
legacy_action_sensor = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
permit_join = true;
|
||||||
|
# Web interface
|
||||||
|
frontend = {
|
||||||
|
port = zigbee2mqttPort; # Choose an available port
|
||||||
|
};
|
||||||
|
# MQTT configuration
|
||||||
|
mqtt = {
|
||||||
|
base_topic = "zigbee2mqtt";
|
||||||
|
server = "mqtt://localhost:1883";
|
||||||
|
# If using authentication:
|
||||||
|
# user = "mqttuser";
|
||||||
|
# password = "your-password";
|
||||||
|
};
|
||||||
|
serial = {
|
||||||
|
port = "/dev/ttyUSB0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
music-assistant = {
|
||||||
|
enable = true;
|
||||||
|
providers = [
|
||||||
|
# "airplay" # music-assistant: airplay support is missing libraop, a library we will not package because it depends on OpenSSL 1.1.
|
||||||
|
"apple_music"
|
||||||
|
"bluesound"
|
||||||
|
"builtin"
|
||||||
|
"chromecast"
|
||||||
|
"deezer"
|
||||||
|
"dlna"
|
||||||
|
"fanarttv"
|
||||||
|
"filesystem_local"
|
||||||
|
"filesystem_smb"
|
||||||
|
"fully_kiosk"
|
||||||
|
"hass"
|
||||||
|
"hass_players"
|
||||||
|
"jellyfin"
|
||||||
|
"musicbrainz"
|
||||||
|
"opensubsonic"
|
||||||
|
"player_group"
|
||||||
|
"plex"
|
||||||
|
"qobuz"
|
||||||
|
"radiobrowser"
|
||||||
|
"siriusxm"
|
||||||
|
"snapcast"
|
||||||
|
"sonos"
|
||||||
|
"sonos_s1"
|
||||||
|
"soundcloud"
|
||||||
|
"spotify"
|
||||||
|
"template_player_provider"
|
||||||
|
"test"
|
||||||
|
"theaudiodb"
|
||||||
|
"tidal"
|
||||||
|
"tunein"
|
||||||
|
"ytmusic"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable AirPlay
|
||||||
|
pipewire = {
|
||||||
|
# opens UDP ports 6001-6002
|
||||||
|
raopOpenFirewall = true;
|
||||||
|
|
||||||
|
extraConfig.pipewire = {
|
||||||
|
"10-airplay" = {
|
||||||
|
"context.modules" = [
|
||||||
|
{
|
||||||
|
name = "libpipewire-module-raop-discover";
|
||||||
|
|
||||||
|
# increase the buffer size if you get dropouts/glitches
|
||||||
|
# args = {
|
||||||
|
# "raop.latency.ms" = 500;
|
||||||
|
# };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable required hardware support for the Zigbee adapter
|
||||||
|
hardware.bluetooth.enable = true; # Some adapters use Bluetooth
|
||||||
|
|
||||||
|
# Ensure proper permissions for Zigbee USB devices
|
||||||
|
# services.udev.extraRules = ''
|
||||||
|
# # For CC2531, CC2530, CC1352P-2, CC2538 and similar adapters
|
||||||
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
|
||||||
|
# # For ConBee/RaspBee by Dresden Elektronik
|
||||||
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1cf1", ATTRS{idProduct}=="0030", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
|
||||||
|
# # For Electrolama zig-a-zig-ah (zzh!)
|
||||||
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
# '';
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
mosquitto # MQTT command-line tools
|
||||||
|
usbutils # For lsusb to help identify your adapter
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
mosquittoPort
|
||||||
|
zigbee2mqttPort
|
||||||
|
8095
|
||||||
|
8097
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,21 +1,5 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
let
|
||||||
magicattr_cust = pkgs.python3Packages.buildPythonPackage rec {
|
|
||||||
pname = "magicattr";
|
|
||||||
version = "0.1.6";
|
|
||||||
format = "setuptools";
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "frmdstryr";
|
|
||||||
repo = pname;
|
|
||||||
rev = "master";
|
|
||||||
sha256 = "sha256-FJtWU5AuunZbdlndGdfD1c9/0s7oRdoTi202pWjuAd8=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = with pkgs.python3Packages; [ setuptools ];
|
|
||||||
doCheck = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
ha-gehome = pkgs.buildHomeAssistantComponent rec {
|
ha-gehome = pkgs.buildHomeAssistantComponent rec {
|
||||||
owner = "simbaja";
|
owner = "simbaja";
|
||||||
domain = "ge_home";
|
domain = "ge_home";
|
||||||
@@ -30,7 +14,7 @@ let
|
|||||||
|
|
||||||
propagatedBuildInputs = with pkgs.python3Packages; [
|
propagatedBuildInputs = with pkgs.python3Packages; [
|
||||||
gehomesdk
|
gehomesdk
|
||||||
magicattr_cust
|
magicattr
|
||||||
slixmpp
|
slixmpp
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -1,394 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
let
|
|
||||||
mosquittoPort = 1883;
|
|
||||||
zigbee2mqttPort = 8080;
|
|
||||||
|
|
||||||
# In configuration.nix or a separate file
|
|
||||||
python-steam = pkgs.python3Packages.buildPythonPackage rec {
|
|
||||||
pname = "steam";
|
|
||||||
version = "1.4.4";
|
|
||||||
pyproject = false;
|
|
||||||
src = pkgs.fetchPypi {
|
|
||||||
inherit pname version;
|
|
||||||
sha256 = "sha256-K1vWkRwNSnMS9EG40WK52NR8i+u478bIhnOTsDI/pS4=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = with pkgs.python3Packages; [ setuptools ];
|
|
||||||
|
|
||||||
doCheck = false; # no tests in the PyPI tarball
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ ./hacs ];
|
|
||||||
|
|
||||||
services.home-assistant = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
configDir = "/var/lib/homeassistant";
|
|
||||||
configWritable = true; # todo
|
|
||||||
extraComponents = [
|
|
||||||
"adguard"
|
|
||||||
"apple_tv"
|
|
||||||
"analytics"
|
|
||||||
"bluetooth"
|
|
||||||
"bluetooth_adapters"
|
|
||||||
"bluetooth_le_tracker"
|
|
||||||
"bluetooth_tracker"
|
|
||||||
"brother"
|
|
||||||
"caldav"
|
|
||||||
"calendar"
|
|
||||||
"cloudflare"
|
|
||||||
"co2signal"
|
|
||||||
"color_extractor"
|
|
||||||
"holiday"
|
|
||||||
"jellyfin"
|
|
||||||
"music_assistant"
|
|
||||||
"nut"
|
|
||||||
"nextcloud"
|
|
||||||
"nws"
|
|
||||||
"ollama"
|
|
||||||
"onedrive"
|
|
||||||
"ping"
|
|
||||||
"samsungtv"
|
|
||||||
"season"
|
|
||||||
"simplefin"
|
|
||||||
"smartthings"
|
|
||||||
"upnp"
|
|
||||||
"workday"
|
|
||||||
"wyoming"
|
|
||||||
|
|
||||||
"google_translate"
|
|
||||||
"met"
|
|
||||||
"radio_browser"
|
|
||||||
"shopping_list"
|
|
||||||
"esphome"
|
|
||||||
# Recommended for fast zlib compression
|
|
||||||
# https://www.home-assistant.io/integrations/isal
|
|
||||||
"isal"
|
|
||||||
"subaru"
|
|
||||||
"vesync"
|
|
||||||
"mqtt" # Enables MQTT integration in HA
|
|
||||||
"ffmpeg" # Enables camera streams
|
|
||||||
"zha" # Enables Zigbee integration
|
|
||||||
"homekit"
|
|
||||||
"music_assistant"
|
|
||||||
];
|
|
||||||
customComponents = with pkgs.home-assistant-custom-components; [
|
|
||||||
auth-header
|
|
||||||
localtuya
|
|
||||||
];
|
|
||||||
customLovelaceModules = with pkgs.home-assistant-custom-lovelace-modules; [
|
|
||||||
atomic-calendar-revive
|
|
||||||
bubble-card
|
|
||||||
button-card
|
|
||||||
hourly-weather
|
|
||||||
mini-graph-card
|
|
||||||
mini-media-player
|
|
||||||
multiple-entity-row
|
|
||||||
mushroom
|
|
||||||
vacuum-card
|
|
||||||
weather-chart-card
|
|
||||||
zigbee2mqtt-networkmap
|
|
||||||
];
|
|
||||||
# use postgresql instead of sqlite
|
|
||||||
extraPackages = ps: with ps; [
|
|
||||||
# Core functionality
|
|
||||||
aiohttp
|
|
||||||
aiodns
|
|
||||||
paho-mqtt
|
|
||||||
pillow
|
|
||||||
pytz
|
|
||||||
pyyaml
|
|
||||||
sqlalchemy
|
|
||||||
|
|
||||||
# Discovery & networking
|
|
||||||
zeroconf
|
|
||||||
netdisco
|
|
||||||
ifaddr
|
|
||||||
ssdp
|
|
||||||
|
|
||||||
# Device protocols
|
|
||||||
pyserial # Serial communications
|
|
||||||
bluepy # Bluetooth LE
|
|
||||||
|
|
||||||
# Smart home ecosystems
|
|
||||||
mutagen # Media file metadata
|
|
||||||
pysonos # Sonos
|
|
||||||
pywemo # Belkin WeMo
|
|
||||||
python-miio # Xiaomi devices
|
|
||||||
python-kasa # TP-Link
|
|
||||||
|
|
||||||
# Sensors & monitoring
|
|
||||||
meteocalc # Weather calculations
|
|
||||||
speedtest-cli # Internet speed
|
|
||||||
|
|
||||||
# Visualization & UI
|
|
||||||
matplotlib # Graphing
|
|
||||||
|
|
||||||
# Security
|
|
||||||
bcrypt
|
|
||||||
cryptography
|
|
||||||
pyjwt
|
|
||||||
|
|
||||||
# Media
|
|
||||||
ha-ffmpeg # Camera streams
|
|
||||||
|
|
||||||
# Specialized integrations
|
|
||||||
python-matter-server # Matter protocol
|
|
||||||
|
|
||||||
# System integrations
|
|
||||||
psutil # System monitoring
|
|
||||||
|
|
||||||
psycopg2
|
|
||||||
numpy
|
|
||||||
hassil
|
|
||||||
pyturbojpeg
|
|
||||||
paho-mqtt
|
|
||||||
pychromecast
|
|
||||||
pyatv
|
|
||||||
python-otbr-api
|
|
||||||
brother
|
|
||||||
pyipp
|
|
||||||
govee-ble
|
|
||||||
adguardhome
|
|
||||||
nextcord
|
|
||||||
aiogithubapi
|
|
||||||
jellyfin-apiclient-python
|
|
||||||
pylitterbot
|
|
||||||
dateparser
|
|
||||||
aionut
|
|
||||||
nextcloudmonitor
|
|
||||||
ollama
|
|
||||||
pynecil
|
|
||||||
aiopyarr
|
|
||||||
pysabnzbd
|
|
||||||
getmac
|
|
||||||
zigpy
|
|
||||||
bellows # For Zigbee EmberZNet-based adapters
|
|
||||||
zigpy-xbee # For XBee adapters
|
|
||||||
zigpy-deconz # For ConBee/RaspBee adapters
|
|
||||||
pyicloud # iCloud
|
|
||||||
pyatv # Apple TV
|
|
||||||
opencv-python
|
|
||||||
face-recognition
|
|
||||||
ibeacon-ble
|
|
||||||
gehomesdk
|
|
||||||
onedrive-personal-sdk
|
|
||||||
python-roborock
|
|
||||||
python-steam
|
|
||||||
apple-weatherkit
|
|
||||||
|
|
||||||
samsungctl
|
|
||||||
samsungtvws
|
|
||||||
|
|
||||||
aiohomekit
|
|
||||||
|
|
||||||
icmplib
|
|
||||||
aioelectricitymaps
|
|
||||||
wyoming
|
|
||||||
pysmartthings
|
|
||||||
wakeonlan
|
|
||||||
ephem
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
|
||||||
# Includes dependencies for a basic setup
|
|
||||||
# https://www.home-assistant.io/integrations/default_config/
|
|
||||||
default_config = {};
|
|
||||||
|
|
||||||
cloud = false;
|
|
||||||
|
|
||||||
frontend = {
|
|
||||||
themes = "!include_dir_merge_named themes";
|
|
||||||
};
|
|
||||||
|
|
||||||
"automation ui" = "!include automations.yaml";
|
|
||||||
"scene ui" = "!include scenes.yaml";
|
|
||||||
"script ui" = "!include scripts.yaml";
|
|
||||||
|
|
||||||
http = {
|
|
||||||
use_x_forwarded_for = true;
|
|
||||||
trusted_proxies = [
|
|
||||||
"172.30.33.0/24"
|
|
||||||
"10.0.1.4"
|
|
||||||
"10.0.4.2"
|
|
||||||
"10.0.1.18"
|
|
||||||
"10.0.1.0/24"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
recorder = {
|
|
||||||
db_url = "postgresql://@/hass";
|
|
||||||
purge_keep_days = 180;
|
|
||||||
};
|
|
||||||
|
|
||||||
auth_header = {
|
|
||||||
debug = false;
|
|
||||||
username_header = "X-authentik-username";
|
|
||||||
};
|
|
||||||
|
|
||||||
# https://www.home-assistant.io/integrations/ota_updater/
|
|
||||||
zha.zigpy_config.ota.z2m_remote_index = "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# https://www.home-assistant.io/integrations/automation/
|
|
||||||
# systemd.tmpfiles.rules = [
|
|
||||||
# "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass"
|
|
||||||
# ];
|
|
||||||
|
|
||||||
# This bypasses the component validation and places it directly in HA's data directory
|
|
||||||
system.activationScripts.installCustomComponents = ''
|
|
||||||
chown -R hass:hass ${config.services.home-assistant.configDir}
|
|
||||||
chmod -R 750 ${config.services.home-assistant.configDir}
|
|
||||||
'';
|
|
||||||
|
|
||||||
services = {
|
|
||||||
postgresql = {
|
|
||||||
enable = true;
|
|
||||||
ensureDatabases = [ "hass" ];
|
|
||||||
ensureUsers = [{
|
|
||||||
name = "hass";
|
|
||||||
ensureDBOwnership = true;
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable and configure Mosquitto MQTT broker
|
|
||||||
mosquitto = {
|
|
||||||
enable = true;
|
|
||||||
listeners = [
|
|
||||||
{
|
|
||||||
acl = [ "pattern readwrite #" ];
|
|
||||||
omitPasswordAuth = true;
|
|
||||||
settings.allow_anonymous = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
zigbee2mqtt = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
homeassistant = {
|
|
||||||
enabled = config.services.home-assistant.enable;
|
|
||||||
# Optional: Home Assistant discovery topic (default: shown below)
|
|
||||||
# Note: should be different from [MQTT base topic](../mqtt.md) to prevent errors in HA software
|
|
||||||
discovery_topic = "homeassistant";
|
|
||||||
# Optional: Home Assistant status topic (default: shown below)
|
|
||||||
status_topic = "homeassistant/status";
|
|
||||||
# Optional: Experimental support for Home Assistant event entities, may break in the future (default: shown below) when enabled:
|
|
||||||
# - An `event` entity will be discovered for each 'action'.
|
|
||||||
# - The `event_type` attribute will contain the action itself, additional attributes like `button` will have further information.
|
|
||||||
experimental_event_entities = false;
|
|
||||||
# Optional: Home Assistant legacy action sensor (default: `false`), when enabled:
|
|
||||||
# - Zigbee2MQTT will send an empty 'action' after one has been send
|
|
||||||
# - A 'sensor_action' will be discovered
|
|
||||||
legacy_action_sensor = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
permit_join = true;
|
|
||||||
# Web interface
|
|
||||||
frontend = {
|
|
||||||
port = zigbee2mqttPort; # Choose an available port
|
|
||||||
};
|
|
||||||
# MQTT configuration
|
|
||||||
mqtt = {
|
|
||||||
base_topic = "zigbee2mqtt";
|
|
||||||
server = "mqtt://localhost:1883";
|
|
||||||
# If using authentication:
|
|
||||||
# user = "mqttuser";
|
|
||||||
# password = "your-password";
|
|
||||||
};
|
|
||||||
serial = {
|
|
||||||
port = "/dev/ttyUSB0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
music-assistant = {
|
|
||||||
enable = true;
|
|
||||||
providers = [
|
|
||||||
# "airplay" # music-assistant: airplay support is missing libraop, a library we will not package because it depends on OpenSSL 1.1.
|
|
||||||
"apple_music"
|
|
||||||
"bluesound"
|
|
||||||
"builtin"
|
|
||||||
"chromecast"
|
|
||||||
"deezer"
|
|
||||||
"dlna"
|
|
||||||
"fanarttv"
|
|
||||||
"filesystem_local"
|
|
||||||
"filesystem_smb"
|
|
||||||
"fully_kiosk"
|
|
||||||
"hass"
|
|
||||||
"hass_players"
|
|
||||||
"jellyfin"
|
|
||||||
"musicbrainz"
|
|
||||||
"opensubsonic"
|
|
||||||
"player_group"
|
|
||||||
"plex"
|
|
||||||
"qobuz"
|
|
||||||
"radiobrowser"
|
|
||||||
"siriusxm"
|
|
||||||
"snapcast"
|
|
||||||
"sonos"
|
|
||||||
"sonos_s1"
|
|
||||||
"soundcloud"
|
|
||||||
"spotify"
|
|
||||||
"template_player_provider"
|
|
||||||
"test"
|
|
||||||
"theaudiodb"
|
|
||||||
"tidal"
|
|
||||||
"tunein"
|
|
||||||
"ytmusic"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable AirPlay
|
|
||||||
pipewire = {
|
|
||||||
# opens UDP ports 6001-6002
|
|
||||||
raopOpenFirewall = true;
|
|
||||||
|
|
||||||
extraConfig.pipewire = {
|
|
||||||
"10-airplay" = {
|
|
||||||
"context.modules" = [
|
|
||||||
{
|
|
||||||
name = "libpipewire-module-raop-discover";
|
|
||||||
|
|
||||||
# increase the buffer size if you get dropouts/glitches
|
|
||||||
# args = {
|
|
||||||
# "raop.latency.ms" = 500;
|
|
||||||
# };
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable required hardware support for the Zigbee adapter
|
|
||||||
hardware.bluetooth.enable = true; # Some adapters use Bluetooth
|
|
||||||
|
|
||||||
# Ensure proper permissions for Zigbee USB devices
|
|
||||||
# services.udev.extraRules = ''
|
|
||||||
# # For CC2531, CC2530, CC1352P-2, CC2538 and similar adapters
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="zigbee", MODE="0666"
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
|
||||||
|
|
||||||
# # For ConBee/RaspBee by Dresden Elektronik
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1cf1", ATTRS{idProduct}=="0030", SYMLINK+="zigbee", MODE="0666"
|
|
||||||
|
|
||||||
# # For Electrolama zig-a-zig-ah (zzh!)
|
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
|
||||||
# '';
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
mosquitto # MQTT command-line tools
|
|
||||||
usbutils # For lsusb to help identify your adapter
|
|
||||||
];
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
|
||||||
mosquittoPort
|
|
||||||
zigbee2mqttPort
|
|
||||||
8095
|
|
||||||
8097
|
|
||||||
];
|
|
||||||
}
|
|
||||||
7
modules/nixos/homeassistant/options.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.services.home-assistant = {
|
||||||
|
enable = mkEnableOption "enable home-assistant";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
let configDir = ./config;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./config/nwg-dock
|
|
||||||
./config/nwg-drawer
|
|
||||||
./config/nwg-panel
|
|
||||||
];
|
|
||||||
home.file = {
|
|
||||||
".config/wallpapers".source = "${configDir}/wallpapers";
|
|
||||||
".config/wlogout".source = "${configDir}/wlogout";
|
|
||||||
".config/waybar/scripts".source = "${configDir}/waybar/scripts";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.btop = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
color_theme = "nord";
|
|
||||||
theme_background = true;
|
|
||||||
truecolor = true;
|
|
||||||
force_tty = false;
|
|
||||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty";
|
|
||||||
vim_keys = true;
|
|
||||||
rounded_corners = true;
|
|
||||||
graph_symbol = "braille";
|
|
||||||
graph_symbol_cpu = "default";
|
|
||||||
graph_symbol_mem = "default";
|
|
||||||
graph_symbol_net = "default";
|
|
||||||
graph_symbol_proc = "default";
|
|
||||||
shown_boxes = "cpu mem net proc";
|
|
||||||
update_ms = 2000;
|
|
||||||
proc_sorting = "cpu lazy";
|
|
||||||
proc_reversed = false;
|
|
||||||
proc_tree = false;
|
|
||||||
proc_colors = true;
|
|
||||||
proc_gradient = true;
|
|
||||||
proc_per_core = false;
|
|
||||||
proc_mem_bytes = true;
|
|
||||||
proc_cpu_graphs = true;
|
|
||||||
proc_info_smaps = false;
|
|
||||||
proc_left = false;
|
|
||||||
proc_filter_kernel = false;
|
|
||||||
cpu_graph_upper = "total";
|
|
||||||
cpu_graph_lower = "total";
|
|
||||||
cpu_invert_lower = true;
|
|
||||||
cpu_single_graph = false;
|
|
||||||
cpu_bottom = false;
|
|
||||||
show_uptime = true;
|
|
||||||
check_temp = true;
|
|
||||||
cpu_sensor = "Auto";
|
|
||||||
show_coretemp = true;
|
|
||||||
cpu_core_map = "";
|
|
||||||
temp_scale = "celsius";
|
|
||||||
base_10_sizes = false;
|
|
||||||
show_cpu_freq = true;
|
|
||||||
clock_format = "%X";
|
|
||||||
background_update = true;
|
|
||||||
custom_cpu_name = "";
|
|
||||||
disks_filter = "";
|
|
||||||
mem_graphs = true;
|
|
||||||
mem_below_net = false;
|
|
||||||
zfs_arc_cached = true;
|
|
||||||
show_swap = true;
|
|
||||||
swap_disk = true;
|
|
||||||
show_disks = true;
|
|
||||||
only_physical = true;
|
|
||||||
use_fstab = true;
|
|
||||||
zfs_hide_datasets = false;
|
|
||||||
disk_free_priv = false;
|
|
||||||
show_io_stat = true;
|
|
||||||
io_mode = false;
|
|
||||||
io_graph_combined = false;
|
|
||||||
io_graph_speeds = "";
|
|
||||||
net_download = 100;
|
|
||||||
net_upload = 100;
|
|
||||||
net_auto = true;
|
|
||||||
net_sync = true;
|
|
||||||
net_iface = "";
|
|
||||||
show_battery = true;
|
|
||||||
selected_battery = "Auto";
|
|
||||||
log_level = "WARNING";
|
|
||||||
};
|
|
||||||
themes = {
|
|
||||||
nord = ''
|
|
||||||
theme[main_bg]="${settings.theme.nord.polarNight.nord0}"
|
|
||||||
theme[main_fg]="${settings.theme.nord.snowStorm.nord6}"
|
|
||||||
theme[title]="${settings.theme.nord.snowStorm.nord6}"
|
|
||||||
theme[hi_fg]="${settings.theme.nord.frost.nord7}"
|
|
||||||
theme[selected_bg]="${settings.theme.nord.polarNight.nord1}"
|
|
||||||
theme[selected_fg]="${settings.theme.nord.frost.nord7}"
|
|
||||||
theme[inactive_fg]="${settings.theme.nord.polarNight.nord2}"
|
|
||||||
theme[graph_text]="${settings.theme.nord.snowStorm.nord6}"
|
|
||||||
theme[meter_bg]="${settings.theme.nord.polarNight.nord1}"
|
|
||||||
theme[proc_misc]="${settings.theme.nord.snowStorm.nord6}"
|
|
||||||
theme[cpu_box]="${settings.theme.nord.aurora.nord15}"
|
|
||||||
theme[mem_box]="${settings.theme.nord.aurora.nord14}"
|
|
||||||
theme[net_box]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[proc_box]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[div_line]="${settings.theme.nord.polarNight.nord1}"
|
|
||||||
theme[temp_start]="${settings.theme.nord.aurora.nord14}"
|
|
||||||
theme[temp_mid]="${settings.theme.nord.aurora.nord13}"
|
|
||||||
theme[temp_end]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[cpu_start]="${settings.theme.nord.aurora.nord15}"
|
|
||||||
theme[cpu_mid]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[cpu_end]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[free_start]="${settings.theme.nord.aurora.nord14}"
|
|
||||||
theme[free_mid]="${settings.theme.nord.aurora.nord13}"
|
|
||||||
theme[free_end]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[cached_start]="${settings.theme.nord.aurora.nord14}"
|
|
||||||
theme[cached_mid]="${settings.theme.nord.aurora.nord13}"
|
|
||||||
theme[cached_end]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[available_start]="${settings.theme.nord.snowStorm.nord6}"
|
|
||||||
theme[available_mid]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[available_end]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[used_start]="${settings.theme.nord.aurora.nord14}"
|
|
||||||
theme[used_mid]="${settings.theme.nord.aurora.nord13}"
|
|
||||||
theme[used_end]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
theme[download_start]="${settings.theme.nord.frost.nord8}"
|
|
||||||
theme[download_mid]="${settings.theme.nord.frost.nord8}"
|
|
||||||
theme[download_end]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[upload_start]="${settings.theme.nord.frost.nord7}"
|
|
||||||
theme[upload_mid]="${settings.theme.nord.frost.nord7}"
|
|
||||||
theme[upload_end]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[process_start]="${settings.theme.nord.aurora.nord15}"
|
|
||||||
theme[process_mid]="${settings.theme.nord.aurora.nord12}"
|
|
||||||
theme[process_end]="${settings.theme.nord.aurora.nord11}"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,314 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
drawer = "nwg-drawer -fm nautilus -term kitty -mb 10 -mt 10 -ml 10 -mr 10 -pbuseicontheme -i ${settings.iconTheme}";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
xwayland.enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
"$mod" = "SUPER";
|
|
||||||
|
|
||||||
# Mouse
|
|
||||||
# mouse_[up|down] - scroll wheel
|
|
||||||
# middle_mouse - 274
|
|
||||||
# thumb_up - 276
|
|
||||||
# thumb_down - 275
|
|
||||||
|
|
||||||
# l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active.
|
|
||||||
# r -> release, will trigger on release of a key.
|
|
||||||
# e -> repeat, will repeat when held.
|
|
||||||
# n -> non-consuming, key/mouse events will be passed to the active window in addition to triggering the dispatcher.
|
|
||||||
# m -> mouse, see below.
|
|
||||||
# t -> transparent, cannot be shadowed by other binds.
|
|
||||||
# i -> ignore mods, will ignore modifiers.
|
|
||||||
# s -> separate, will arbitrarily combine keys between each mod/key, see [Keysym combos](#keysym-combos) above.
|
|
||||||
# d -> has description, will allow you to write a description for your bind.
|
|
||||||
# p -> bypasses the app's requests to inhibit keybinds.
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Binds/
|
|
||||||
# https://wiki.hyprland.org/Configuring/Binds/#mouse-buttons
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
"$mod, Return, exec, ${settings.defaultApps.terminal.pname}"
|
|
||||||
"$mod, SPACE, exec, wofi --show drun"
|
|
||||||
", xf86Search, exec, wofi --show drun"
|
|
||||||
"$mod, Q, killactive, "
|
|
||||||
"$mod, M, exec, wlogout --protocol layer-shell"
|
|
||||||
"$mod, E, exec, ${settings.defaultApps.fileExplorer.pname}"
|
|
||||||
"$mod, V, togglefloating, "
|
|
||||||
"$mod, D, exec, ${drawer}"
|
|
||||||
"$mod, P, pseudo, " # dwindle
|
|
||||||
"$mod, S, togglesplit, " # dwindle
|
|
||||||
"$mod SHIFT, Q, exec, hyprlock"
|
|
||||||
"$mod SHIFT, 4, exec, hyprshot -m region --clipboard-only"
|
|
||||||
"$mod, F, fullscreen, 1"
|
|
||||||
"$mod SHIFT, F, fullscreen, 0"
|
|
||||||
"$mod SHIFT, E, exec, smile"
|
|
||||||
|
|
||||||
"$mod, mouse:276, movecurrentworkspacetomonitor, ${settings.displayLeft.input}"
|
|
||||||
"$mod, mouse:275, movecurrentworkspacetomonitor, ${settings.displayRight.input}"
|
|
||||||
|
|
||||||
# alt-tab between workspaces on active monitor
|
|
||||||
"$mod, Tab, workspace, m+1"
|
|
||||||
"$mod SHIFT, Tab, workspace, m-1"
|
|
||||||
|
|
||||||
"$mod, h, movefocus, l"
|
|
||||||
"$mod, l, movefocus, r"
|
|
||||||
"$mod, k, movefocus, u"
|
|
||||||
"$mod, j, movefocus, d"
|
|
||||||
|
|
||||||
"$mod, 1, workspace, 1"
|
|
||||||
"$mod, 2, workspace, 2"
|
|
||||||
"$mod, 3, workspace, 3"
|
|
||||||
"$mod, 4, workspace, 4"
|
|
||||||
"$mod, 5, workspace, 5"
|
|
||||||
"$mod, 6, workspace, 6"
|
|
||||||
"$mod, 7, workspace, 7"
|
|
||||||
"$mod, 8, workspace, 8"
|
|
||||||
"$mod, 9, workspace, 9"
|
|
||||||
"$mod, 0, workspace, 10"
|
|
||||||
|
|
||||||
"$mod ALT, 1, movetoworkspace, 1"
|
|
||||||
"$mod ALT, 2, movetoworkspace, 2"
|
|
||||||
"$mod ALT, 3, movetoworkspace, 3"
|
|
||||||
"$mod ALT, 4, movetoworkspace, 4"
|
|
||||||
"$mod ALT, 5, movetoworkspace, 5"
|
|
||||||
"$mod ALT, 6, movetoworkspace, 6"
|
|
||||||
"$mod ALT, 7, movetoworkspace, 7"
|
|
||||||
"$mod ALT, 8, movetoworkspace, 8"
|
|
||||||
"$mod ALT, 9, movetoworkspace, 9"
|
|
||||||
"$mod ALT, 0, movetoworkspace, discord"
|
|
||||||
|
|
||||||
"$mod CTRL, l, resizeactive, 10 0"
|
|
||||||
"$mod CTRL, h, resizeactive, -10 0"
|
|
||||||
"$mod CTRL, k, resizeactive, 0 -10"
|
|
||||||
"$mod CTRL, j, resizeactive, 0 10"
|
|
||||||
|
|
||||||
"$mod SHIFT, l, movewindow, r"
|
|
||||||
"$mod SHIFT, h, movewindow, l"
|
|
||||||
"$mod SHIFT, k, movewindow, u"
|
|
||||||
"$mod SHIFT, j, movewindow, d"
|
|
||||||
|
|
||||||
"$mod, b, exec, ${settings.defaultApps.browser.pname}"
|
|
||||||
];
|
|
||||||
|
|
||||||
bindm = [
|
|
||||||
# Move/resize windows with mod + LMB/RMB and dragging
|
|
||||||
"$mod, mouse:272, movewindow"
|
|
||||||
"$mod, mouse:273, resizewindow"
|
|
||||||
# middle mouse will grab a window, mod + middle mouse will close it
|
|
||||||
"$mod SHIFT, mouse:274, movewindow"
|
|
||||||
];
|
|
||||||
|
|
||||||
bindel = [
|
|
||||||
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
|
|
||||||
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
|
||||||
];
|
|
||||||
|
|
||||||
bindl = [
|
|
||||||
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
|
||||||
", XF86AudioPlay, exec, playerctl play-pause"
|
|
||||||
", XF86AudioPrev, exec, playerctl previous"
|
|
||||||
", XF86AudioNext, exec, playerctl next"
|
|
||||||
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
|
||||||
|
|
||||||
", XF86MonBrightnessUp, exec, brightnessctl set +5%"
|
|
||||||
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
|
|
||||||
|
|
||||||
"$mod, XF86MonBrightnessUp, exec, brightnessctl -d kbd_backlight set +10%"
|
|
||||||
"$mod, XF86MonBrightnessDown, exec, brightnessctl -d kbd_backlight set 10%-"
|
|
||||||
];
|
|
||||||
|
|
||||||
monitor = hyprlandSettings.monitor or [ ];
|
|
||||||
monitorv2 = hyprlandSettings.monitorv2 or { };
|
|
||||||
|
|
||||||
render = {
|
|
||||||
cm_fs_passthrough = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
vrr = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
general = {
|
|
||||||
gaps_in = 5;
|
|
||||||
gaps_out = 10;
|
|
||||||
border_size = 1;
|
|
||||||
"col.active_border" = "rgb(8aadf4) rgb(24273A) rgb(24273A) rgb(8aadf4) 45deg";
|
|
||||||
"col.inactive_border" = "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg";
|
|
||||||
layout = "dwindle";
|
|
||||||
allow_tearing = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
rounding = 10;
|
|
||||||
blur = {
|
|
||||||
enabled = true;
|
|
||||||
size = 2;
|
|
||||||
passes = 2;
|
|
||||||
new_optimizations = true;
|
|
||||||
xray = false;
|
|
||||||
};
|
|
||||||
# drop_shadow = "yes";
|
|
||||||
# shadow_range = 4;
|
|
||||||
# shadow_render_power = "3";
|
|
||||||
# "col.shadow" = "rgba(1a1a1aee)";
|
|
||||||
};
|
|
||||||
|
|
||||||
animations = {
|
|
||||||
enabled = "yes";
|
|
||||||
bezier = [
|
|
||||||
"overshot, 0.05, 0.9, 0.1, 1.05"
|
|
||||||
"smoothOut, 0.36, 0, 0.66, -0.56"
|
|
||||||
"smoothIn, 0.25, 1, 0.5, 1"
|
|
||||||
];
|
|
||||||
animation = [
|
|
||||||
"windows, 1, 5, overshot, slide"
|
|
||||||
"windowsOut, 1, 4, smoothOut, slide"
|
|
||||||
"windowsMove, 1, 4, default"
|
|
||||||
"border, 1, 10, default"
|
|
||||||
"fade, 1, 10, smoothIn"
|
|
||||||
"fadeDim, 1, 10, smoothIn"
|
|
||||||
"workspaces, 1, 6, default"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
dwindle = {
|
|
||||||
pseudotile = "yes";
|
|
||||||
preserve_split = "yes";
|
|
||||||
};
|
|
||||||
|
|
||||||
gestures = {
|
|
||||||
workspace_swipe = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
force_default_wallpaper = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
workspace = hyprlandSettings.workspace;
|
|
||||||
|
|
||||||
windowrule = [
|
|
||||||
"float, title:(file_progress)"
|
|
||||||
"float, title:(.*[Cc]onfirm.*)"
|
|
||||||
"float, title:(.*[Dd]ialog.*)"
|
|
||||||
"float, title:(.*[Dd]ownload.*)"
|
|
||||||
"float, title:(.*[Nn]otification.*)"
|
|
||||||
"float, title:(.*[Ee]rror.*)"
|
|
||||||
"float, title:(.*[Ss]plash.*)"
|
|
||||||
"float, title:(.*[Cc]onfirmreset.*)"
|
|
||||||
"float, title:(.*[Ss]ign [Ii]n - .*)"
|
|
||||||
"float, title:(.*[Oo]pen [Ff]ile.*)"
|
|
||||||
"float, title:(.*branchdialog.*)"
|
|
||||||
"float, class:(.*pavucontrol.*)"
|
|
||||||
"move onscreen cursor 0% 0%, class:(.*pavucontrol.*)"
|
|
||||||
"float, class:(.*[Oo]verskride.*)"
|
|
||||||
"float, class:(.*FileRoller.*)"
|
|
||||||
"float, class:(.*wlogout.*)"
|
|
||||||
"idleinhibit stayfocused, title:(.*mpv.*)"
|
|
||||||
|
|
||||||
"float, class:(.*nm-connection-editor.*)"
|
|
||||||
"move onscreen cursor 0% 0%, class:(.*nm-connection-editor.*)"
|
|
||||||
|
|
||||||
"float, title:(Media viewer)"
|
|
||||||
"float, class:(it.mijorus.smile),title:(Smile)"
|
|
||||||
"float, class:(.blueman-manager-wrapped)$,title:(Bluetooth Devices)"
|
|
||||||
# Picture in picture windows
|
|
||||||
"float, title:(.*Picture-in-Picture.*)"
|
|
||||||
"pin, title::(.*Picture-in-Picture.*)"
|
|
||||||
|
|
||||||
# discord/vesktop
|
|
||||||
"workspace: name:discord, class:(.*vesktop)"
|
|
||||||
"float, class:(.*vesktop),title:(.*Discord Popout.*)"
|
|
||||||
"pin, class:(.*vesktop),title:(.*Discord Popout.*)"
|
|
||||||
|
|
||||||
# Music
|
|
||||||
"workspace: name:discord, class:(Apple Music.*)"
|
|
||||||
|
|
||||||
# Steam
|
|
||||||
"float, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
|
||||||
"workspace name:steam silent, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
|
||||||
"tile, class:(.*[Ss]team), title:(.*[Ss]team.*)$"
|
|
||||||
"float, class:(.*steam),title:(.*Friends List.*)"
|
|
||||||
|
|
||||||
# Code
|
|
||||||
"pin, class:(.*codium.*),title:(Save As)"
|
|
||||||
"float, class:(.*codium.*),title:(Save As)"
|
|
||||||
"float, class:(xdg-desktop-portal-gtk),title:(Open Workspace from File)"
|
|
||||||
|
|
||||||
# Game Tearing??? https://wiki.hyprland.org/Configuring/Tearing/
|
|
||||||
"immediate, class:(.*gamescope)"
|
|
||||||
|
|
||||||
# vmware
|
|
||||||
# this tag will set the below options to the vdi window
|
|
||||||
# this will have it auto open as a 2160x7680 window
|
|
||||||
# and makes multi-monitor work
|
|
||||||
"tag +horizonrdp, class:(.*[Vv][Mm]ware-view),title:(USPS Next VDI)"
|
|
||||||
|
|
||||||
"noanim, tag:horizonrdp"
|
|
||||||
"noblur, tag:horizonrdp"
|
|
||||||
"norounding, tag:horizonrdp"
|
|
||||||
"noshadow, tag:horizonrdp"
|
|
||||||
"immediate, tag:horizonrdp"
|
|
||||||
"allowsinput, tag:horizonrdp"
|
|
||||||
"noborder, tag:horizonrdp"
|
|
||||||
"nodim, tag:horizonrdp"
|
|
||||||
"nomaxsize, tag:horizonrdp"
|
|
||||||
"renderunfocused, tag:horizonrdp"
|
|
||||||
"idleinhibit, tag:horizonrdp"
|
|
||||||
"float, tag:horizonrdp"
|
|
||||||
# "size 2160 7680, tag:horizonrdp"
|
|
||||||
# "move onscreen 0 0, tag:horizonrdp"
|
|
||||||
# float the vmware window cause its annoying to use in fullscreen
|
|
||||||
"float, class:(.*[Vv][Mm]ware-view),title:([Vv][Mm]ware [Hh]orizon [Cc]lient)"
|
|
||||||
|
|
||||||
"tag +waydroid, class:([Ww]aydroid.*)"
|
|
||||||
"float, tag:waydroid"
|
|
||||||
"pin, tag:waydroid"
|
|
||||||
] ++ hyprlandSettings.windowRule;
|
|
||||||
|
|
||||||
input = {
|
|
||||||
kb_layout = "us";
|
|
||||||
|
|
||||||
kb_variant = "";
|
|
||||||
kb_model = "";
|
|
||||||
kb_options = "";
|
|
||||||
kb_rules = "";
|
|
||||||
|
|
||||||
numlock_by_default = true;
|
|
||||||
|
|
||||||
follow_mouse = 1;
|
|
||||||
|
|
||||||
touchpad = {
|
|
||||||
clickfinger_behavior = 1;
|
|
||||||
natural_scroll = "yes";
|
|
||||||
};
|
|
||||||
|
|
||||||
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
|
|
||||||
};
|
|
||||||
|
|
||||||
experimental = {
|
|
||||||
xx_color_management_v4 = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
debug = {
|
|
||||||
full_cm_proto = true;
|
|
||||||
disable_logs = true;
|
|
||||||
disable_scale_checks = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
extraConfig = ''
|
|
||||||
exec-once = dbus-update-activation-environment --systemd --all
|
|
||||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
|
||||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
|
||||||
exec-once = xhost +SI:localuser:root
|
|
||||||
exec-once = nwg-look -a
|
|
||||||
exec-once = nwg-dock-hyprland -d
|
|
||||||
'' + hyprlandSettings.extraConfig or '''';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.kitty = {
|
|
||||||
enable = true;
|
|
||||||
shellIntegration.enableZshIntegration = true;
|
|
||||||
|
|
||||||
font = {
|
|
||||||
name = settings.fontName;
|
|
||||||
package = settings.fontPackage;
|
|
||||||
size = settings.fontSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
bold_font = "auto";
|
|
||||||
italic_font = "auto";
|
|
||||||
bold_italic_font = "auto";
|
|
||||||
mouse_hide_wait = "2.0";
|
|
||||||
cursor_shape = "block";
|
|
||||||
url_style = "dotted";
|
|
||||||
confirm_os_window_close = "0";
|
|
||||||
background_opacity = "0.85";
|
|
||||||
|
|
||||||
# The basic colors
|
|
||||||
foreground = settings.theme.nord.snowStorm.nord6;
|
|
||||||
background = settings.theme.nord.polarNight.nord0;
|
|
||||||
selection_foreground = settings.theme.nord.polarNight.nord0;
|
|
||||||
selection_background = settings.theme.nord.aurora.nord15;
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor = settings.theme.nord.aurora.nord15;
|
|
||||||
cursor_text_color = settings.theme.nord.polarNight.nord0;
|
|
||||||
|
|
||||||
# URL underline color when hovering with mouse
|
|
||||||
url_color = settings.theme.nord.aurora.nord15;
|
|
||||||
|
|
||||||
# Kitty window border colors
|
|
||||||
active_border_color = settings.theme.nord.frost.nord10;
|
|
||||||
inactive_border_color = settings.theme.nord.polarNight.nord1;
|
|
||||||
bell_border_color = settings.theme.nord.aurora.nord13;
|
|
||||||
|
|
||||||
# OS Window titlebar colors
|
|
||||||
wayland_titlebar_color = settings.theme.nord.polarNight.nord0;
|
|
||||||
macos_titlebar_color = settings.theme.nord.polarNight.nord0;
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground = settings.theme.nord.polarNight.nord3;
|
|
||||||
active_tab_background = settings.theme.nord.aurora.nord15;
|
|
||||||
inactive_tab_foreground = settings.theme.nord.snowStorm.nord6;
|
|
||||||
inactive_tab_background = settings.theme.nord.polarNight.nord1;
|
|
||||||
tab_bar_background = settings.theme.nord.polarNight.nord3;
|
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
|
||||||
mark1_foreground = settings.theme.nord.polarNight.nord0;
|
|
||||||
mark1_background = settings.theme.nord.frost.nord10;
|
|
||||||
mark2_foreground = settings.theme.nord.polarNight.nord0;
|
|
||||||
mark2_background = settings.theme.nord.aurora.nord15;
|
|
||||||
mark3_foreground = settings.theme.nord.polarNight.nord0;
|
|
||||||
mark3_background = settings.theme.nord.frost.nord8;
|
|
||||||
|
|
||||||
# The 16 terminal colors
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 = settings.theme.nord.polarNight.nord0;
|
|
||||||
|
|
||||||
# Autosuggestion
|
|
||||||
color8 = settings.theme.nord.frost.nord10;
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 = settings.theme.nord.aurora.nord11;
|
|
||||||
color9 = settings.theme.nord.aurora.nord11;
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 = settings.theme.nord.aurora.nord14;
|
|
||||||
color10 = settings.theme.nord.aurora.nord14;
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 = settings.theme.nord.aurora.nord13;
|
|
||||||
color11 = settings.theme.nord.aurora.nord13;
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 = settings.theme.nord.frost.nord10;
|
|
||||||
color12 = settings.theme.nord.frost.nord10;
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 = settings.theme.nord.aurora.nord15;
|
|
||||||
color13 = settings.theme.nord.aurora.nord15;
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 = settings.theme.nord.frost.nord8;
|
|
||||||
color14 = settings.theme.nord.frost.nord8;
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 = settings.theme.nord.snowStorm.nord5;
|
|
||||||
color15 = settings.theme.nord.snowStorm.nord4;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
services.mako = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
font = settings.fontName;
|
|
||||||
icons = true;
|
|
||||||
ignore-timeout = true;
|
|
||||||
sort = "-time";
|
|
||||||
width = 500;
|
|
||||||
height = 110;
|
|
||||||
layer = "overlay";
|
|
||||||
border-radius = 15;
|
|
||||||
border-size = 1;
|
|
||||||
max-icon-size = 64;
|
|
||||||
default-timeout = 5000;
|
|
||||||
|
|
||||||
background-color = settings.theme.nord.polarNight.nord0;
|
|
||||||
text-color = settings.theme.nord.snowStorm.nord6;
|
|
||||||
border-color = settings.theme.nord.frost.nord10;
|
|
||||||
progress-color = "over ${settings.theme.nord.frost.nord8}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.file = {
|
|
||||||
".config/nwg-dock-hyprland/drawer.css".text = ''
|
|
||||||
window {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
border-radius: 10px;
|
|
||||||
border-style: none;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: ${settings.theme.nord.aurora.nord15}b0
|
|
||||||
}
|
|
||||||
|
|
||||||
#box {
|
|
||||||
/* Define attributes of the box surrounding icons here */
|
|
||||||
padding: 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
active {
|
|
||||||
/* This is to underline the button representing the currently active window */
|
|
||||||
border-bottom: solid 1px;
|
|
||||||
border-color: ${settings.theme.nord.aurora.nord14}1a
|
|
||||||
}
|
|
||||||
|
|
||||||
button, image {
|
|
||||||
background: none;
|
|
||||||
border-style: none;
|
|
||||||
box-shadow: none;
|
|
||||||
color: ${settings.theme.nord.frost.nord10}
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
padding: 4px;
|
|
||||||
margin-left: 4px;
|
|
||||||
margin-right: 4px;
|
|
||||||
color: #eee;
|
|
||||||
font-size: 12px
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0}1a;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:focus {
|
|
||||||
box-shadow: none
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.file = {
|
|
||||||
".config/nwg-drawer/drawer.css".text = ''
|
|
||||||
window {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0}bf;
|
|
||||||
color: ${settings.theme.nord.snowStorm.nord5}00
|
|
||||||
}
|
|
||||||
|
|
||||||
/* search entry */
|
|
||||||
entry {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord1}0f
|
|
||||||
}
|
|
||||||
|
|
||||||
button, image {
|
|
||||||
background: none;
|
|
||||||
border: none
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
background-color: ${settings.theme.nord.frost.nord10}1a
|
|
||||||
}
|
|
||||||
|
|
||||||
/* in case you wanted to give category buttons a different look */
|
|
||||||
#category-button {
|
|
||||||
margin: 0 10px 0 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
#pinned-box {
|
|
||||||
padding-bottom: 5px;
|
|
||||||
border-bottom: 1px dotted ${settings.theme.nord.polarNight.nord3}
|
|
||||||
}
|
|
||||||
|
|
||||||
#files-box {
|
|
||||||
padding: 5px;
|
|
||||||
border: 1px dotted ${settings.theme.nord.polarNight.nord3};
|
|
||||||
border-radius: 15px
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.file = {
|
|
||||||
".config/nwg-panel/excluded-dirs".text = ''
|
|
||||||
|
|
||||||
'';
|
|
||||||
".config/nwg-panel/preferred-apps.json".text = ''
|
|
||||||
{
|
|
||||||
"\\.pdf$": "${settings.defaultApps.browser.pname}",
|
|
||||||
"\\.svg$": "inkscape",
|
|
||||||
"\\.(jpg|png|tiff|gif)$": "${settings.defaultApps.imageViewer.pname}",
|
|
||||||
"\\.(mp3|ogg|flac|wav|wma)$": "audacious",
|
|
||||||
"\\.(avi|mp4|mkv|mov|wav)$": "${settings.defaultApps.video.pname}",
|
|
||||||
"\\.(doc|docx|xls|xlsx)$": "${settings.defaultApps.office.pname}"
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,505 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
defaultOpacity = settings.theme.waybar.defaultOpacity;
|
|
||||||
defaultBorderRadius = settings.theme.waybar.defaultBorderRadius;
|
|
||||||
defaultCenterOptions = settings.theme.waybar.defaultCenterOptions;
|
|
||||||
borderLeft = settings.theme.waybar.borderLeft;
|
|
||||||
borderRight = settings.theme.waybar.borderRight;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./scripts/hass.nix
|
|
||||||
./scripts/weather.nix
|
|
||||||
];
|
|
||||||
# https://github.com/Alexays/Waybar/wiki/Module:-Hyprland
|
|
||||||
# https://www.nerdfonts.com/cheat-sheet
|
|
||||||
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
settings = {
|
|
||||||
mainBar = {
|
|
||||||
layer = hyprlandSettings.waybar.layer;
|
|
||||||
position = "top";
|
|
||||||
mod = "dock";
|
|
||||||
exclusive = true;
|
|
||||||
passthrough = false;
|
|
||||||
gtk-layer-shell = true;
|
|
||||||
height = 0;
|
|
||||||
|
|
||||||
# Module Layout
|
|
||||||
modules-left = [ "hyprland/workspaces" ];
|
|
||||||
|
|
||||||
modules-center = [ "hyprland/window" ];
|
|
||||||
|
|
||||||
modules-right = hyprlandSettings.waybar.modules-right;
|
|
||||||
|
|
||||||
# Module Definitions
|
|
||||||
# Left
|
|
||||||
"hyprland/workspaces" = {
|
|
||||||
disable-scroll = true;
|
|
||||||
all-outputs = true;
|
|
||||||
on-click = "activate";
|
|
||||||
persistent_workspaces = {
|
|
||||||
"*" = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Center
|
|
||||||
"hyprland/window" = {
|
|
||||||
separate-outputs = true;
|
|
||||||
format = { };
|
|
||||||
};
|
|
||||||
|
|
||||||
# Left
|
|
||||||
tray = {
|
|
||||||
icon-size = 16;
|
|
||||||
spacing = 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
temperature = {
|
|
||||||
hwmon-path = "/sys/class/hwmon/hwmon4/temp1_input";
|
|
||||||
critical-threshold = 110;
|
|
||||||
format-critical = "{temperatureC}°C ";
|
|
||||||
format = "{temperatureC}°C {icon}";
|
|
||||||
format-icons = [
|
|
||||||
"" # fa-temperature-empty
|
|
||||||
"" # fa-temperature-quarter
|
|
||||||
"" # fa-temperature-half
|
|
||||||
"" # fa-temperature-three-quarters
|
|
||||||
"" # fa-temperature-full
|
|
||||||
];
|
|
||||||
tooltip-format = "CPU: {temperatureC}°C";
|
|
||||||
};
|
|
||||||
|
|
||||||
"temperature#gpu" = {
|
|
||||||
hwmon-path = "/sys/class/hwmon/hwmon0/temp1_input";
|
|
||||||
critical-threshold = 110;
|
|
||||||
format-critical = "{temperatureC}°C ";
|
|
||||||
format = "{temperatureC}°C {icon}";
|
|
||||||
format-icons = [
|
|
||||||
"" # fa-temperature-empty
|
|
||||||
"" # fa-temperature-quarter
|
|
||||||
"" # fa-temperature-half
|
|
||||||
"" # fa-temperature-three-quarters
|
|
||||||
"" # fa-temperature-full
|
|
||||||
];
|
|
||||||
on-click = "lact";
|
|
||||||
tooltip-format = "GPU: {temperatureC}°C";
|
|
||||||
};
|
|
||||||
|
|
||||||
"keyboard-state#capslock" = {
|
|
||||||
capslock = true;
|
|
||||||
format = "{icon}";
|
|
||||||
tooltip-format = "Caps Lock {state}";
|
|
||||||
format-icons = {
|
|
||||||
locked = "";
|
|
||||||
unlocked = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"keyboard-state#numlock" = {
|
|
||||||
numlock = true;
|
|
||||||
format = "{icon}";
|
|
||||||
tooltip-format = "Num Lock {state}";
|
|
||||||
format-icons = {
|
|
||||||
locked = "";
|
|
||||||
unlocked = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"wireplumber#sink" = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
tooltip = false;
|
|
||||||
format-muted = "{icon} Muted";
|
|
||||||
on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
|
|
||||||
on-click-right = "pavucontrol -t 1";
|
|
||||||
on-scroll-up = "wpctl set-volume @DEFAULT_SINK@ 5%+";
|
|
||||||
on-scroll-down = "wpctl set-volume @DEFAULT_SINK@ 5%-";
|
|
||||||
scroll-step = 5;
|
|
||||||
format-icons = {
|
|
||||||
headphone = "";
|
|
||||||
headphone-muted = "";
|
|
||||||
hands-free = "";
|
|
||||||
headset = "";
|
|
||||||
phone = "";
|
|
||||||
portable = "";
|
|
||||||
car = "";
|
|
||||||
default = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"wireplumber#source" = {
|
|
||||||
node-type = "Audio/Source";
|
|
||||||
format = "";
|
|
||||||
format-muted = "";
|
|
||||||
tooltip = false;
|
|
||||||
# tooltip-format = "{source_desc} | {source_volume}%";
|
|
||||||
on-click = "wpctl set-mute @DEFAULT_SOURCE@ toggle";
|
|
||||||
on-click-right = "pavucontrol -t 2";
|
|
||||||
on-scroll-up = "wpctl set-volume @DEFAULT_SOURCE@ 5%+";
|
|
||||||
on-scroll-down = "wpctl set-volume @DEFAULT_SOURCE@ 5%-";
|
|
||||||
scroll-step = 5;
|
|
||||||
};
|
|
||||||
|
|
||||||
"bluetooth" = {
|
|
||||||
on-click = "overskride";
|
|
||||||
tooltip = true;
|
|
||||||
format = "{icon}";
|
|
||||||
tooltip-format = "{status}";
|
|
||||||
tooltip-format-disabled = "{status}";
|
|
||||||
tooltip-format-off = "{status}";
|
|
||||||
tooltip-format-on = "{status}";
|
|
||||||
tooltip-format-connected = "{status}";
|
|
||||||
tooltip-format-enumerate-connected = { };
|
|
||||||
format-icons = {
|
|
||||||
disabled = "";
|
|
||||||
off = "";
|
|
||||||
on = "";
|
|
||||||
connected = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
network = {
|
|
||||||
interface = hyprlandSettings.networkInterface;
|
|
||||||
on-click = "nm-connection-editor";
|
|
||||||
format = "{icon}";
|
|
||||||
tooltip-format = "{ifname} via {gwaddr} ";
|
|
||||||
tooltip-format-wifi = ''
|
|
||||||
{essid} ({signalStrength}%) {icon}
|
|
||||||
{bandwidthDownBits} {bandwidthUpBits}
|
|
||||||
'';
|
|
||||||
tooltip-format-ethernet = "{ifname} ";
|
|
||||||
tooltip-format-disconnected = "Disconnected";
|
|
||||||
max-length = 50;
|
|
||||||
format-icons = {
|
|
||||||
wifi = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
ethernet = "";
|
|
||||||
linked = "";
|
|
||||||
disconnected = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
idle_inhibitor = {
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
activated = "";
|
|
||||||
deactivated = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
clock = {
|
|
||||||
format = "{:%I:%M %p}";
|
|
||||||
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
|
||||||
calendar = {
|
|
||||||
mode = "month";
|
|
||||||
format = {
|
|
||||||
months = "<span color='${settings.theme.nord.frost.nord9}'><b>{}</b></span>";
|
|
||||||
days = "<span color='${settings.theme.nord.frost.nord10}'><b>{}</b></span>";
|
|
||||||
weekdays = "<span color='${settings.theme.nord.frost.nord8}'><b>{}</b></span>";
|
|
||||||
today = "<span color='${settings.theme.nord.aurora.nord14}'><b><u>{}</u></b></span>";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
battery = {
|
|
||||||
# bat = "macsmc-battery";
|
|
||||||
interval = 60;
|
|
||||||
# statuses: 'Charging', 'Discharging'
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "{capacity}% {icon}";
|
|
||||||
format-icons = {
|
|
||||||
default = [
|
|
||||||
"" # critical
|
|
||||||
"" # 10%
|
|
||||||
"" # 20%
|
|
||||||
"" # 30%
|
|
||||||
"" # 40%
|
|
||||||
"" # 50%
|
|
||||||
"" # 60%
|
|
||||||
"" # 70%
|
|
||||||
"" # 80%
|
|
||||||
"" # 90%
|
|
||||||
"" # 100%
|
|
||||||
];
|
|
||||||
charging = [
|
|
||||||
"" # critical
|
|
||||||
"" # 10%
|
|
||||||
"" # 20%
|
|
||||||
"" # 30%
|
|
||||||
"" # 40%
|
|
||||||
"" # 50%
|
|
||||||
"" # 60%
|
|
||||||
"" # 70%
|
|
||||||
"" # 80%
|
|
||||||
"" # 90%
|
|
||||||
"" # 100%
|
|
||||||
];
|
|
||||||
};
|
|
||||||
max-length = 25;
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/weather" = {
|
|
||||||
tooltip = true;
|
|
||||||
format = { };
|
|
||||||
interval = 30;
|
|
||||||
exec = "waybar-weather";
|
|
||||||
return-type = "json";
|
|
||||||
markup = "pango";
|
|
||||||
};
|
|
||||||
} // hyprlandSettings.waybar.extraModules or { };
|
|
||||||
};
|
|
||||||
|
|
||||||
# * { font-size: 13px; }
|
|
||||||
# window.eDP-1 * { font-size: 10px; }
|
|
||||||
|
|
||||||
style = ''
|
|
||||||
.blink_me {
|
|
||||||
animation: blinker 1s linear infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blinker {
|
|
||||||
50% {
|
|
||||||
color: ${settings.theme.nord.aurora.nord11};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
font-family:
|
|
||||||
Jetbrains Mono Nerd Font,
|
|
||||||
monospace;
|
|
||||||
font-size: 14px;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#waybar {
|
|
||||||
background: transparent;
|
|
||||||
color: ${settings.theme.nord.snowStorm.nord6};
|
|
||||||
margin: 5px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
margin-left: 0.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
color: ${settings.theme.nord.frost.nord10};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
padding: 0.4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.active {
|
|
||||||
color: ${settings.theme.nord.frost.nord8};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:hover {
|
|
||||||
color: ${settings.theme.nord.frost.nord7};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.focused {
|
|
||||||
color: ${settings.theme.nord.snowStorm.nord6};
|
|
||||||
background: ${settings.theme.nord.aurora.nord13};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.urgent {
|
|
||||||
color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
background: ${settings.theme.nord.snowStorm.nord6};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
}
|
|
||||||
|
|
||||||
#tooltip {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
border-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultBorderRadius}
|
|
||||||
border-width: 1rem;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
color: ${settings.theme.nord.aurora.nord15};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultBorderRadius}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
margin-left: ${hyprlandSettings.waybar.moduleStyle.window.margin-left or "4rem"};
|
|
||||||
margin-right: ${hyprlandSettings.waybar.moduleStyle.window.margin-right or "4rem"};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* make window module transparent when no windows present */
|
|
||||||
#window.empty {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-weather {
|
|
||||||
color: ${settings.theme.nord.frost.nord10};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${borderRight}
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery {
|
|
||||||
color: ${settings.theme.nord.aurora.nord15};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
min-width: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
color: ${settings.theme.nord.frost.nord9};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${borderLeft}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------- */
|
|
||||||
|
|
||||||
#idle_inhibitor {
|
|
||||||
color: ${settings.theme.nord.frost.nord10};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${borderRight}
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#idle_inhibitor:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
color: ${settings.theme.nord.aurora.nord15};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
padding-right: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#network:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#bluetooth {
|
|
||||||
color: ${settings.theme.nord.frost.nord9};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#bluetooth:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.source {
|
|
||||||
color: ${settings.theme.nord.frost.nord8};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.source.muted {
|
|
||||||
animation-name: blinker;
|
|
||||||
animation-duration: 2s;
|
|
||||||
animation-timing-function: linear;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.source:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.sink {
|
|
||||||
color: ${settings.theme.nord.frost.nord7};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.sink.muted {
|
|
||||||
animation-name: blinker;
|
|
||||||
animation-duration: 5s;
|
|
||||||
animation-timing-function: linear;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.sink:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboard-state.numlock {
|
|
||||||
color: ${settings.theme.nord.frost.nord8};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboard-state.capslock {
|
|
||||||
color: ${settings.theme.nord.frost.nord9};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature.gpu {
|
|
||||||
color: ${settings.theme.nord.frost.nord10};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature.gpu:hover {
|
|
||||||
background: ${settings.theme.nord.polarNight.nord3};
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature {
|
|
||||||
color: ${settings.theme.nord.frost.nord9};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${hyprlandSettings.waybar.moduleStyle.temperature.location or defaultCenterOptions}
|
|
||||||
border-radius: ${hyprlandSettings.waybar.moduleStyle.temperature.border-radius or "0"}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------- */
|
|
||||||
|
|
||||||
#tray {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
${defaultOpacity}
|
|
||||||
${defaultCenterOptions}
|
|
||||||
${defaultBorderRadius}
|
|
||||||
margin-right: 0.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------- */
|
|
||||||
'' + hyprlandSettings.waybar.extraModulesStyle or '''';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.wlogout = {
|
|
||||||
enable = true;
|
|
||||||
layout = {
|
|
||||||
lock = {
|
|
||||||
label = "lock";
|
|
||||||
action = "hyprlock --immediate";
|
|
||||||
text = "Lock";
|
|
||||||
keybind = "l";
|
|
||||||
};
|
|
||||||
hibernate = {
|
|
||||||
label = "hibernate";
|
|
||||||
action = "systemctl hibernate";
|
|
||||||
text = "Hibernate";
|
|
||||||
keybind = "h";
|
|
||||||
};
|
|
||||||
logout = {
|
|
||||||
label = "logout";
|
|
||||||
action = "sleep 1; hyprctl dispatch exit";
|
|
||||||
text = "Logout";
|
|
||||||
keybind = "e";
|
|
||||||
};
|
|
||||||
shutdown = {
|
|
||||||
label = "shutdown";
|
|
||||||
action = "systemctl poweroff";
|
|
||||||
text = "Shutdown";
|
|
||||||
keybind = "s";
|
|
||||||
};
|
|
||||||
suspend = {
|
|
||||||
label = "suspend";
|
|
||||||
action = "systemctl suspend";
|
|
||||||
text = "Suspend";
|
|
||||||
keybind = "u";
|
|
||||||
};
|
|
||||||
reboot = {
|
|
||||||
label = "reboot";
|
|
||||||
action = "reboot";
|
|
||||||
text = "Reboot";
|
|
||||||
keybind = "r";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
style = ''
|
|
||||||
* {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
window {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0}f0
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
margin: 8px;
|
|
||||||
color: ${settings.theme.nord.frost.nord7};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord1};
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 2px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: center;
|
|
||||||
background-size: 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:active,
|
|
||||||
button:focus,
|
|
||||||
button:hover {
|
|
||||||
color: ${settings.theme.nord.frost.nord8};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord2};
|
|
||||||
outline-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lock {
|
|
||||||
background-image: image(url("icons/lock.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#logout {
|
|
||||||
background-image: image(url("icons/logout.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#suspend {
|
|
||||||
background-image: image(url("icons/suspend.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#hibernate {
|
|
||||||
background-image: image(url("icons/hibernate.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#shutdown {
|
|
||||||
background-image: image(url("icons/shutdown.png"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#reboot {
|
|
||||||
background-image: image(url("icons/reboot.png"));
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{ pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ../../settings.nix { inherit pkgs; };
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.wofi = {
|
|
||||||
enable = true;
|
|
||||||
style = ''
|
|
||||||
* {
|
|
||||||
font-family: "${settings.fontName}", monospace;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Window */
|
|
||||||
window {
|
|
||||||
margin: 0px;
|
|
||||||
padding: 10px;
|
|
||||||
border: 0.16em solid ${settings.theme.nord.aurora.nord15};
|
|
||||||
border-radius: 0.1em;
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inner Box */
|
|
||||||
#inner-box {
|
|
||||||
margin: 5px;
|
|
||||||
padding: 10px;
|
|
||||||
border: none;
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Outer Box */
|
|
||||||
#outer-box {
|
|
||||||
margin: 5px;
|
|
||||||
padding: 10px;
|
|
||||||
border: none;
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scroll */
|
|
||||||
#scroll {
|
|
||||||
margin: 0px;
|
|
||||||
padding: 10px;
|
|
||||||
border: none;
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Input */
|
|
||||||
#input {
|
|
||||||
margin: 5px 20px;
|
|
||||||
padding: 10px;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0.1em;
|
|
||||||
color: ${settings.theme.nord.snowStorm.nord6};
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
#input image {
|
|
||||||
border: none;
|
|
||||||
color: ${settings.theme.nord.aurora.nord11};
|
|
||||||
}
|
|
||||||
|
|
||||||
#input * {
|
|
||||||
outline: 4px solid ${settings.theme.nord.aurora.nord11}!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Text */
|
|
||||||
#text {
|
|
||||||
margin: 5px;
|
|
||||||
border: none;
|
|
||||||
color: ${settings.theme.nord.snowStorm.nord6};
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry {
|
|
||||||
background-color: ${settings.theme.nord.polarNight.nord0};
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry arrow {
|
|
||||||
border: none;
|
|
||||||
color: ${settings.theme.nord.aurora.nord15};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Selected Entry */
|
|
||||||
#entry:selected {
|
|
||||||
border: 0.11em solid ${settings.theme.nord.aurora.nord15};
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry:selected #text {
|
|
||||||
color: ${settings.theme.nord.frost.nord7};
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry:drop(active) {
|
|
||||||
background-color: ${settings.theme.nord.aurora.nord15}!important;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
{ config, pkgs, lib, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ./settings.nix { inherit pkgs; };
|
|
||||||
|
|
||||||
bing-wallpaper = pkgs.writeScriptBin "bing-wallpaper" ''
|
|
||||||
# Directory to store wallpapers
|
|
||||||
IMG_PATH="/run/wallpaper.jpg"
|
|
||||||
|
|
||||||
# Download if not already downloaded
|
|
||||||
URL=$(curl -s "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1" | \
|
|
||||||
jq -r '.images[0].url')
|
|
||||||
FULL_URL="https://www.bing.com$URL"
|
|
||||||
curl -s -o "$IMG_PATH" "$FULL_URL"
|
|
||||||
echo "Downloaded $FULL_URL to $IMG_PATH successfully"
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./environment.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.systemPackages = [ bing-wallpaper pkgs.jq ];
|
|
||||||
|
|
||||||
home-manager.users."${settings.user}" = (import ./home.nix {inherit lib pkgs hyprlandSettings;});
|
|
||||||
|
|
||||||
services = {
|
|
||||||
displayManager = {
|
|
||||||
sddm = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.kdePackages.sddm;
|
|
||||||
extraPackages = [ settings.sddm.package ];
|
|
||||||
theme = settings.sddm.themeName;
|
|
||||||
wayland.enable = true;
|
|
||||||
settings = {
|
|
||||||
Theme = {
|
|
||||||
ThemeDir = "${settings.sddm.package}/share/sddm/themes";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Disable gdm
|
|
||||||
gdm.enable = lib.mkForce false;
|
|
||||||
defaultSession = "hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
# disable other desktops
|
|
||||||
desktopManager = {
|
|
||||||
plasma6.enable = lib.mkForce false;
|
|
||||||
gnome.enable = lib.mkForce false;
|
|
||||||
};
|
|
||||||
|
|
||||||
dbus.enable = true;
|
|
||||||
|
|
||||||
ddccontrol.enable = true;
|
|
||||||
|
|
||||||
blueman.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
hyprland = {
|
|
||||||
enable = true;
|
|
||||||
xwayland.enable = true;
|
|
||||||
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
|
||||||
};
|
|
||||||
|
|
||||||
nm-applet.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd = {
|
|
||||||
services = {
|
|
||||||
preload-bing-wallpaper = {
|
|
||||||
enable = true;
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
before = [ "display-manager.service" ];
|
|
||||||
requiredBy = [
|
|
||||||
"plymouth-quit-wait.service"
|
|
||||||
"display-manager.service"
|
|
||||||
];
|
|
||||||
wantedBy = [ "display-manager.service" ];
|
|
||||||
path = [
|
|
||||||
pkgs.bash
|
|
||||||
pkgs.jq
|
|
||||||
pkgs.curl
|
|
||||||
bing-wallpaper
|
|
||||||
];
|
|
||||||
script = ''
|
|
||||||
bing-wallpaper
|
|
||||||
'';
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
user = {
|
|
||||||
services = {
|
|
||||||
reload-bing-wallpaper = {
|
|
||||||
enable = true;
|
|
||||||
path = [
|
|
||||||
pkgs.bash
|
|
||||||
pkgs.jq
|
|
||||||
pkgs.curl
|
|
||||||
pkgs.hyprland
|
|
||||||
bing-wallpaper
|
|
||||||
];
|
|
||||||
script = ''
|
|
||||||
bing-wallpaper
|
|
||||||
${pkgs.hyprland}/bin/hyprctl hyprpaper reload ,/run/wallpaper
|
|
||||||
'';
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Create a timer to run the service periodically
|
|
||||||
timers = {
|
|
||||||
reload-bing-wallpaper = {
|
|
||||||
description = "Timer for reload-bing-wallpaper";
|
|
||||||
wantedBy = [ "timers.target" ];
|
|
||||||
|
|
||||||
# Timer configuration
|
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "daily"; # Check every day
|
|
||||||
Persistent = true; # Run immediately if last run was missed
|
|
||||||
Unit = "reload-bing-wallpaper.service";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
DefaultTimeoutStopSec=10s
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
polkit.enable = true;
|
|
||||||
|
|
||||||
# configure sudo
|
|
||||||
sudo.extraRules = [
|
|
||||||
{
|
|
||||||
commands = [
|
|
||||||
{
|
|
||||||
command = "/run/current-system/sw/bin/waybar-weather";
|
|
||||||
options = [ "NOPASSWD" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
command = "/run/current-system/sw/bin/waybar-updates";
|
|
||||||
options = [ "NOPASSWD" ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
groups = [ "wheel" ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
wlr.enable = true;
|
|
||||||
xdgOpenUsePortal = true;
|
|
||||||
extraPortals = [
|
|
||||||
pkgs.xdg-desktop-portal-hyprland
|
|
||||||
pkgs.xdg-desktop-portal-gnome
|
|
||||||
pkgs.xdg-desktop-portal-gtk
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(self: super: {
|
|
||||||
waybar = super.waybar.overrideAttrs (oldAttrs: {
|
|
||||||
mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
|
|
||||||
});
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,283 +0,0 @@
|
|||||||
{ lib, pkgs, hyprlandSettings, ... }:
|
|
||||||
let
|
|
||||||
settings = import ./settings.nix { inherit pkgs hyprlandSettings; };
|
|
||||||
wallpaper = "/run/wallpaper.jpg";
|
|
||||||
jiggler = pkgs.python3.pkgs.buildPythonPackage rec {
|
|
||||||
pname = "jiggler";
|
|
||||||
version = "0.0.3";
|
|
||||||
format = "pyproject";
|
|
||||||
src = pkgs.fetchPypi {
|
|
||||||
inherit pname version;
|
|
||||||
sha256 = "sha256-6M4CbwxajYaQ5s73y+arKewLgu/pjfCay2giVVGYjhM=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# do not run tests
|
|
||||||
doCheck = false;
|
|
||||||
nativeBuildInputs = with pkgs.python3.pkgs; [ setuptools ];
|
|
||||||
propagatedBuildInputs = with pkgs.python3.pkgs; [
|
|
||||||
click
|
|
||||||
pynput
|
|
||||||
];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./config.nix
|
|
||||||
./config/btop
|
|
||||||
(import ./config/hypr {inherit pkgs hyprlandSettings;})
|
|
||||||
./config/kitty
|
|
||||||
./config/mako
|
|
||||||
(import ./config/waybar {inherit pkgs hyprlandSettings;})
|
|
||||||
./config/wofi
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
plugins = with pkgs.hyprlandPlugins; [
|
|
||||||
hyprgrass
|
|
||||||
];
|
|
||||||
settings = {
|
|
||||||
plugin = {
|
|
||||||
touch_gestures = {
|
|
||||||
# The default sensitivity is probably too low on tablet screens,
|
|
||||||
# I recommend turning it up to 4.0
|
|
||||||
sensitivity = "4.0";
|
|
||||||
|
|
||||||
# must be >= 3
|
|
||||||
workspace_swipe_fingers = "3";
|
|
||||||
|
|
||||||
# switching workspaces by swiping from an edge, this is separate from workspace_swipe_fingers
|
|
||||||
# and can be used at the same time
|
|
||||||
# possible values: l, r, u, or d
|
|
||||||
# to disable it set it to anything else
|
|
||||||
workspace_swipe_edge = "d";
|
|
||||||
|
|
||||||
# in milliseconds
|
|
||||||
long_press_delay = "400";
|
|
||||||
|
|
||||||
# resize windows by long-pressing on window borders and gaps.
|
|
||||||
# If general:resize_on_border is enabled, general:extend_border_grab_area is used for floating
|
|
||||||
# windows
|
|
||||||
resize_on_border_long_press = true;
|
|
||||||
|
|
||||||
# in pixels, the distance from the edge that is considered an edge
|
|
||||||
edge_margin = "10";
|
|
||||||
|
|
||||||
# emulates touchpad swipes when swiping in a direction that does not trigger workspace swipe.
|
|
||||||
# ONLY triggers when finger count is equal to workspace_swipe_fingers
|
|
||||||
#
|
|
||||||
# might be removed in the future in favor of event hooks
|
|
||||||
emulate_touchpad_swipe = false;
|
|
||||||
|
|
||||||
experimental = {
|
|
||||||
# send proper cancel events to windows instead of hacky touch_up events,
|
|
||||||
# NOT recommended as it crashed a few times, once it's stabilized I'll make it the default
|
|
||||||
send_cancel = "0";
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprgrass-bind = [
|
|
||||||
# swipe left from right edge
|
|
||||||
", edge:r:l, workspace, +1"
|
|
||||||
|
|
||||||
# swipe up from bottom edge
|
|
||||||
", edge:d:u, exec, ${settings.defaultApps.browser.pname}"
|
|
||||||
|
|
||||||
# swipe down from left edge
|
|
||||||
", edge:l:d, exec, pactl set-sink-volume @DEFAULT_SINK@ -4%"
|
|
||||||
|
|
||||||
# swipe down with 4 fingers
|
|
||||||
", swipe:4:d, killactive"
|
|
||||||
|
|
||||||
# swipe diagonally left and down with 3 fingers
|
|
||||||
# l (or r) must come before d and u
|
|
||||||
", swipe:3:ld, exec, foot"
|
|
||||||
|
|
||||||
# tap with 3 fingers
|
|
||||||
", tap:3, exec, foot"
|
|
||||||
|
|
||||||
# longpress can trigger mouse binds:
|
|
||||||
", longpress:2, movewindow"
|
|
||||||
", longpress:3, resizewindow"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
gestures = {
|
|
||||||
workspace_swipe = lib.mkForce true;
|
|
||||||
workspace_swipe_cancel_ratio = "0.15";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
hyprpolkitagent.enable = true;
|
|
||||||
hyprpaper = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
preload = [ "/run/wallpaper.jpg" wallpaper ];
|
|
||||||
wallpaper = hyprlandSettings.wallpaper;
|
|
||||||
splash = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
hypridle = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general = {
|
|
||||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
|
||||||
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
|
||||||
ignore_dbus_inhibit = false;
|
|
||||||
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
|
|
||||||
};
|
|
||||||
listener = [
|
|
||||||
# {
|
|
||||||
# timeout = 300; # 5min
|
|
||||||
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
|
||||||
# on-resume = "brightnessctl -r"; # monitor backlight restore.
|
|
||||||
# }
|
|
||||||
{
|
|
||||||
timeout = settings.lockScreenTimer;
|
|
||||||
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
|
|
||||||
}
|
|
||||||
{
|
|
||||||
timeout = settings.screenOffTimer;
|
|
||||||
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
|
||||||
on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
|
||||||
}
|
|
||||||
{
|
|
||||||
timeout = settings.suspendTimer;
|
|
||||||
on-timeout = "systemctl suspend"; # suspend pc
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
hyprlock = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
background = [
|
|
||||||
{
|
|
||||||
monitor = "";
|
|
||||||
path = wallpaper; # supports png, jpg, webp (no animations, though)
|
|
||||||
color = "rgba(25, 20, 20, 1.0)";
|
|
||||||
|
|
||||||
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
|
||||||
blur_passes = "3"; # 0 disables blurring
|
|
||||||
blur_size = "7";
|
|
||||||
noise = "0.0117";
|
|
||||||
contrast = "0.8916";
|
|
||||||
brightness = "0.8172";
|
|
||||||
vibrancy = "0.1696";
|
|
||||||
vibrancy_darkness = "0.0";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
input-field = [
|
|
||||||
{
|
|
||||||
size = "200, 50";
|
|
||||||
position = "0, -80";
|
|
||||||
monitor = hyprlandSettings.primaryDisplay.input;
|
|
||||||
dots_center = true;
|
|
||||||
fade_on_empty = true;
|
|
||||||
font_color = "rgb(202, 211, 245)";
|
|
||||||
inner_color = "rgb(91, 96, 120)";
|
|
||||||
outer_color = "rgb(24, 25, 38)";
|
|
||||||
bothlock_color = -1;
|
|
||||||
outline_thickness = 5;
|
|
||||||
placeholder_text = ''<span foreground="##cad3f5">Password...</span>'';
|
|
||||||
shadow_passes = 2;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
vscode.profiles.default.userSettings."window"."titleBarStyle" = "custom";
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
sessionVariables = {
|
|
||||||
BROWSER = "${settings.defaultApps.browser.pname}";
|
|
||||||
CLUTTER_BACKEND = "wayland";
|
|
||||||
EDITOR = "${settings.defaultApps.editor.pname}";
|
|
||||||
VISUAL = "${settings.defaultApps.visual.pname}";
|
|
||||||
ICON_THEME = settings.iconTheme;
|
|
||||||
GTK_CSD = "0";
|
|
||||||
GTK_THEME = settings.gtkTheme;
|
|
||||||
GTK_USE_PORTAL = "1";
|
|
||||||
HYPRCURSOR_THEME = settings.cursorTheme;
|
|
||||||
HYPRCURSOR_SIZE = settings.cursorSize;
|
|
||||||
MOZ_ENABLE_WAYLAND = "1";
|
|
||||||
NIXOS_OZONE_WL = "1";
|
|
||||||
NIXOS_XDG_OPEN_USE_PORTAL = "1";
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
|
||||||
QT_QPA_PLATFORM = "wayland-egl";
|
|
||||||
QT_QPA_PLATFORMTHEME = "gtk3";
|
|
||||||
QT_SCALE_FACTOR = "1";
|
|
||||||
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
|
||||||
SDL_VIDEODRIVER = "wayland";
|
|
||||||
TERMINAL = "${settings.defaultApps.terminal.pname}";
|
|
||||||
XCURSOR_THEME = settings.cursorTheme;
|
|
||||||
XCURSOR_SIZE = settings.cursorSize;
|
|
||||||
XDG_CACHE_HOME = "\${HOME}/.cache";
|
|
||||||
XDG_CONFIG_HOME = "\${HOME}/.config";
|
|
||||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
||||||
XDG_DATA_HOME = "\${HOME}/.local/share";
|
|
||||||
XDG_SESSION_DESKTOP = "Hyprland";
|
|
||||||
XDG_SESSION_TYPE = "wayland";
|
|
||||||
};
|
|
||||||
|
|
||||||
pointerCursor = {
|
|
||||||
gtk.enable = true;
|
|
||||||
package = settings.cursorThemePkg;
|
|
||||||
name = settings.cursorTheme;
|
|
||||||
size = settings.cursorSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = [
|
|
||||||
jiggler
|
|
||||||
] ++ settings.requiredPkgs;
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
|
|
||||||
"org/gnome/desktop/interface".cursor-theme = settings.cursorTheme;
|
|
||||||
"org/gnome/desktop/interface".gtk-theme = settings.gtkTheme;
|
|
||||||
"org/gnome/desktop/interface".icon-theme = settings.iconTheme;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
cursorTheme = {
|
|
||||||
name = settings.cursorTheme;
|
|
||||||
package = settings.cursorThemePkg;
|
|
||||||
};
|
|
||||||
|
|
||||||
theme = {
|
|
||||||
name = settings.gtkTheme;
|
|
||||||
package = settings.gtkThemePkg;
|
|
||||||
};
|
|
||||||
|
|
||||||
iconTheme = {
|
|
||||||
name = settings.iconTheme;
|
|
||||||
package = settings.iconThemePkg;
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk3.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk4.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
font = {
|
|
||||||
name = settings.fontName;
|
|
||||||
package = settings.fontPackage;
|
|
||||||
size = settings.fontSize;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
specialisation.hyprland.configuration = {
|
|
||||||
imports = [ ./default.nix ];
|
|
||||||
environment.etc."specialisation".text = "hyprland";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
{
|
|
||||||
# Nord colors
|
|
||||||
# Opacity Hex alpha
|
|
||||||
# 100% FF
|
|
||||||
# 75% BF
|
|
||||||
# 50% 80
|
|
||||||
# 25% 40
|
|
||||||
# 10% 1A
|
|
||||||
# 0% 00
|
|
||||||
nord = {
|
|
||||||
polarNight = {
|
|
||||||
nord0 = "#2e3440";
|
|
||||||
nord1 = "#3b4252";
|
|
||||||
nord2 = "#434c5e";
|
|
||||||
nord3 = "#4c566a";
|
|
||||||
};
|
|
||||||
snowStorm = {
|
|
||||||
nord4 = "#d8dee9";
|
|
||||||
nord5 = "#e5e9f0";
|
|
||||||
nord6 = "#eceff4";
|
|
||||||
};
|
|
||||||
frost = {
|
|
||||||
nord7 = "#8fbcbb";
|
|
||||||
nord8 = "#88c0d0";
|
|
||||||
nord9 = "#81a1c1";
|
|
||||||
nord10 = "#5e81ac";
|
|
||||||
};
|
|
||||||
aurora = {
|
|
||||||
nord11 = "#bf616a";
|
|
||||||
nord12 = "#d08770";
|
|
||||||
nord13 = "#ebcb8b";
|
|
||||||
nord14 = "#a3be8c";
|
|
||||||
nord15 = "#b48ead";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
waybar = {
|
|
||||||
defaultOpacity = "opacity: 0.85;";
|
|
||||||
defaultBorderRadius = "border-radius: 1rem;";
|
|
||||||
defaultCenterOptions = ''
|
|
||||||
padding-top: 0.2rem;
|
|
||||||
padding-bottom: 0.2rem;
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
margin: 3px 0;
|
|
||||||
'';
|
|
||||||
borderRight = ''
|
|
||||||
padding-top: 0.2rem;
|
|
||||||
padding-bottom: 0.2rem;
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
margin: 3px 0;
|
|
||||||
border-radius: 0rem 1rem 1rem 0rem;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
'';
|
|
||||||
borderLeft = ''
|
|
||||||
padding-top: 0.2rem;
|
|
||||||
padding-bottom: 0.2rem;
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
margin: 3px 0;
|
|
||||||
border-radius: 1rem 0rem 0rem 1rem;
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{ lib, outputs, ... }:
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
@@ -24,15 +24,10 @@
|
|||||||
optimise.automatic = lib.mkDefault true;
|
optimise.automatic = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Nixpkgs configuration
|
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
# add unstable and stable overlays
|
|
||||||
overlays = [
|
|
||||||
outputs.overlays.nixpkgs-unstable
|
|
||||||
outputs.overlays.nixpkgs-stable
|
|
||||||
];
|
|
||||||
config = {
|
config = {
|
||||||
allowUnfree = lib.mkForce true;
|
allowUnfree = lib.mkForce true;
|
||||||
|
allowUnsupportedSystem = true;
|
||||||
permittedInsecurePackages = [
|
permittedInsecurePackages = [
|
||||||
# ...
|
# ...
|
||||||
];
|
];
|
||||||
@@ -1,6 +1,17 @@
|
|||||||
{ lib, pkgs, ... }:
|
{ pkgs, lib, ... }:
|
||||||
{
|
{
|
||||||
programs = {
|
programs = {
|
||||||
|
zsh.enable = lib.mkDefault true;
|
||||||
|
gnupg.agent = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
enableSSHSupport = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
nix-index = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
enableBashIntegration = lib.mkDefault false;
|
||||||
|
enableZshIntegration = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
nix-ld = {
|
nix-ld = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
libraries = with pkgs; [
|
libraries = with pkgs; [
|
||||||
@@ -28,4 +39,15 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
seahorse.enable = lib.mkDefault true;
|
seahorse.enable = lib.mkDefault true;
|
||||||
};}
|
};
|
||||||
|
environment = {
|
||||||
|
systemPackages = with pkgs; [
|
||||||
|
attic-client
|
||||||
|
uutils-coreutils
|
||||||
|
uutils-diffutils
|
||||||
|
uutils-findutils
|
||||||
|
coreutils
|
||||||
|
nixd
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
services = {
|
services = {
|
||||||
|
|
||||||
kmscon = {
|
kmscon = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault false;
|
||||||
hwRender = true;
|
hwRender = true;
|
||||||
fonts = [
|
fonts = [
|
||||||
{
|
{
|
||||||
@@ -31,6 +31,7 @@
|
|||||||
avahi = {
|
avahi = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
nssmdns4 = lib.mkDefault true; # For modern systems, use nssmdns4 instead of nssmdns
|
nssmdns4 = lib.mkDefault true; # For modern systems, use nssmdns4 instead of nssmdns
|
||||||
|
openFirewall = lib.mkDefault true;
|
||||||
publish = {
|
publish = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
addresses = lib.mkDefault true;
|
addresses = lib.mkDefault true;
|
||||||
@@ -38,5 +39,16 @@
|
|||||||
workstation = lib.mkDefault true;
|
workstation = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# configure pipewire
|
||||||
|
pipewire = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
alsa.enable = lib.mkDefault true;
|
||||||
|
alsa.support32Bit = lib.mkDefault true;
|
||||||
|
pulse.enable = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable CUPS to print documents.
|
||||||
|
printing.enable = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
13
modules/nixos/system/default.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{ ... }:
|
||||||
|
let
|
||||||
|
timezone = "America/Chicago";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Time config
|
||||||
|
time = {
|
||||||
|
# Set your time zone.
|
||||||
|
timeZone = timezone;
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "23.11";
|
||||||
|
}
|
||||||
6
overlays/waybar.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{ ... }:
|
||||||
|
final: prev: {
|
||||||
|
waybar = prev.waybar.overrideAttrs (old: {
|
||||||
|
mesonFlags = (old.mesonFlags or []) ++ [ "-Dexperimental=true" ];
|
||||||
|
});
|
||||||
|
}
|
||||||
17
packages/magicattr/default.nix
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{ lib, python3Packages, fetchFromGitHub, ... }:
|
||||||
|
|
||||||
|
python3Packages.buildPythonPackage rec {
|
||||||
|
pname = "magicattr";
|
||||||
|
version = "0.1.6";
|
||||||
|
format = "setuptools";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "frmdstryr";
|
||||||
|
repo = pname;
|
||||||
|
rev = "master";
|
||||||
|
sha256 = "sha256-FJtWU5AuunZbdlndGdfD1c9/0s7oRdoTi202pWjuAd8=";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = with python3Packages; [ setuptools ];
|
||||||
|
doCheck = false;
|
||||||
|
}
|
||||||