Compare commits
22 Commits
652f005769
...
2d1d85ddc6
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d1d85ddc6 | |||
| 7a371f3b1e | |||
| bf8c4d050d | |||
| 1832c5ac83 | |||
| 6f1c74d243 | |||
| d1dde74c4f | |||
| 05607c2b48 | |||
| eea735134d | |||
| d9f06234fd | |||
| f4b505d1d1 | |||
| 24ac2aca51 | |||
| 4881ac5808 | |||
| b7fb67f939 | |||
| 32f37c7c2e | |||
| 0a31b25d83 | |||
| acc28d9278 | |||
| ae04500e63 | |||
| f463b76253 | |||
| 5298430415 | |||
| 14f790e67a | |||
| 6ca265e97b | |||
| 7b11dbdcfa |
36
flake.lock
generated
36
flake.lock
generated
@@ -111,11 +111,11 @@
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760309387,
|
||||
"narHash": "sha256-yCjkJuQbt6DjdS1XJL2uwyLu1AcmDvlyMGojBq8Ua38=",
|
||||
"lastModified": 1761256472,
|
||||
"narHash": "sha256-iDM8s8cSkncybNs5IGo7qqeErCh+lk0mF6aiVYEtDHA=",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"rev": "d099e5e84e191d67a7bffa574ab39b6d0d4f6adf",
|
||||
"rev": "cdd5e78adf3d28a20a94628164188253bdfff2c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -337,11 +337,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1760284886,
|
||||
"narHash": "sha256-TK9Kr0BYBQ/1P5kAsnNQhmWWKgmZXwUQr4ZMjCzWf2c=",
|
||||
"lastModified": 1761114652,
|
||||
"narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "cf3f5c4def3c7b5f1fc012b3d839575dbe552d43",
|
||||
"rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -352,11 +352,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1760139962,
|
||||
"narHash": "sha256-4xggC56Rub3WInz5eD7EZWXuLXpNvJiUPahGtMkwtuc=",
|
||||
"lastModified": 1761016216,
|
||||
"narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7e297ddff44a3cc93673bb38d0374df8d0ad73e4",
|
||||
"rev": "481cf557888e05d3128a76f14c76397b7d7cc869",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -401,11 +401,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760374571,
|
||||
"narHash": "sha256-M2lAawtTe+ASWhcHTiTxtI3ROic8bsNLNN3RvJ2ghew=",
|
||||
"lastModified": 1761238604,
|
||||
"narHash": "sha256-xZ8SGSSndcvjZLUrMLrz4DjnPFtjZfSGZzEHPGnS2Eg=",
|
||||
"owner": "notashelf",
|
||||
"repo": "nvf",
|
||||
"rev": "3e48f13c3ce8372d00be2e27f313f2ed8da5bc82",
|
||||
"rev": "dad8ece966760d5de956ffa69670ffce1a90f3e3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -437,11 +437,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760393368,
|
||||
"narHash": "sha256-8mN3kqyqa2PKY0wwZ2UmMEYMcxvNTwLaOrrDsw6Qi4E=",
|
||||
"lastModified": 1760998189,
|
||||
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "ab8d56e85b8be14cff9d93735951e30c3e86a437",
|
||||
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -471,11 +471,11 @@
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760472212,
|
||||
"narHash": "sha256-4C3I/ssFsq8EgaUmZP0xv5V7RV0oCHgL/Rx+MUkuE+E=",
|
||||
"lastModified": 1761028816,
|
||||
"narHash": "sha256-s1XiIeJHpODVWfzsPaK9e21iz1dQSCU3H4/1OxOsyps=",
|
||||
"owner": "nix-community",
|
||||
"repo": "stylix",
|
||||
"rev": "8d008296a1b3be9b57ad570f7acea00dd2fc92db",
|
||||
"rev": "b81dc0a385443099e7d231fe6275189e32c3b760",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
13
flake.nix
13
flake.nix
@@ -51,16 +51,25 @@
|
||||
};
|
||||
stable_pkgs = builtins.mapAttrs (k: v: import nixpkgs {system = v;}) systems;
|
||||
unstable_pkgs = builtins.mapAttrs (k: v: import nixpkgs-unstable {system = v;}) systems;
|
||||
current_system = builtins.currentSystem;
|
||||
in {
|
||||
nixosConfigurations = {
|
||||
snowbelle = nixpkgs.lib.nixosSystem {
|
||||
system = systems.x86_64;
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs;};
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs current_system;};
|
||||
modules = [
|
||||
./hosts/nixos/snowbelle/configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
];
|
||||
};
|
||||
yveltal = nixpkgs.lib.nixosSystem {
|
||||
system = systems.x86_64;
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs current_system;};
|
||||
modules = [
|
||||
./hosts/nixos/yveltal/configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
];
|
||||
};
|
||||
vaniville = nixpkgs.lib.nixosSystem {
|
||||
system = systems.x86_64;
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs;};
|
||||
@@ -73,7 +82,7 @@
|
||||
darwinConfigurations = {
|
||||
CEN-IT-07 = nix-darwin.lib.darwinSystem {
|
||||
system = systems.darwin;
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs nix-homebrew;};
|
||||
specialArgs = {inherit inputs stable_pkgs unstable_pkgs nix-homebrew current_system;};
|
||||
modules = [
|
||||
./hosts/darwin/cen-it-07/configuration.nix
|
||||
inputs.home-manager.darwinModules.default
|
||||
|
||||
@@ -21,13 +21,13 @@ in
|
||||
sops.enable = true;
|
||||
podman.enable = true;
|
||||
yubikey.enable = true;
|
||||
syncthing.enable = true;
|
||||
tailscale.enable = true;
|
||||
nvidia.enable = true;
|
||||
};
|
||||
holocron = {
|
||||
syncthing.enable = true;
|
||||
copyparty.enable = true;
|
||||
ensure_perms.enable = true;
|
||||
ensure_perms.enable = false;
|
||||
zfs.enable = true;
|
||||
smb.enable = true;
|
||||
nfs.enable = true;
|
||||
@@ -36,6 +36,7 @@ in
|
||||
enable = true;
|
||||
backups.enable = true;
|
||||
motd.enable = true;
|
||||
postfix.enable = true;
|
||||
gitea.enable = true;
|
||||
glance.enable = true;
|
||||
immich.enable = true;
|
||||
|
||||
15
modules/desktop/hyprland/default.nix
Normal file
15
modules/desktop/hyprland/default.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
|
||||
# enable hyprland
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
# hint to election apps wayland is in use
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
|
||||
}
|
||||
@@ -58,7 +58,7 @@ in {
|
||||
home = cfg.data_dir;
|
||||
createHome = true;
|
||||
group = service;
|
||||
extraGroups = [ "media" "blake" ];
|
||||
extraGroups = [ "media" "blake" "archives" ];
|
||||
};
|
||||
|
||||
# enable the ${service} service
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
./nfs
|
||||
./smb
|
||||
./zfs
|
||||
./syncthing
|
||||
./copyparty
|
||||
./perms
|
||||
];
|
||||
|
||||
85
modules/holocron/syncthing/default.nix
Normal file
85
modules/holocron/syncthing/default.nix
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
service = "syncthing";
|
||||
cfg = config.holocron.${service};
|
||||
sec = config.sops.secrets;
|
||||
url = "syncthing.snowbelle.lan";
|
||||
homelab = config.homelab;
|
||||
in {
|
||||
options.holocron.${service} = {
|
||||
enable = lib.mkEnableOption "enables syncthing";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
user = "blake";
|
||||
group = "blake";
|
||||
dataDir = "/var/lib/syncthing";
|
||||
guiAddress = "0.0.0.0:2222";
|
||||
openDefaultPorts = true;
|
||||
extraFlags = ["--no-default-folder"];
|
||||
key = sec."${service}/snowbelle/key".path;
|
||||
cert = sec."${service}/snowbelle/cert".path;
|
||||
settings = {
|
||||
devices = {
|
||||
"lugia" = {id = "BKKSFPH-YEOVVAB-DTT7KK3-UDKAEJ2-PC6ECG7-Y76ZIVP-JRYMMXS-RTZYVQ3";};
|
||||
"zygarde" = {id = "UYLTF52-VVKUR7F-JN33HQZ-RFNWGL3-JER52LA-GZD2LPJ-QIFEE7K-MNMZRQ5";};
|
||||
"CEN-IT-07" = {id = "DPYKA4Z-3PX7JB2-FBEOXXX-SC7TLT2-QC5P2IR-SXOPJGX-QO3DMII-5B7UCA4";};
|
||||
};
|
||||
folders = {
|
||||
"holocron" = {
|
||||
path = "/holocron/users/blake/holocron";
|
||||
devices = ["lugia" "zygarde" "CEN-IT-07"];
|
||||
id = "5voxg-c3he2";
|
||||
versioning = {
|
||||
type = "staggered";
|
||||
fsPath = "/holocron/users/blake/holocron/.stversions";
|
||||
params = {
|
||||
cleanInterval = "3600";
|
||||
maxAge = "0";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
options = {
|
||||
urAccepted = -1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sops.secrets = {
|
||||
"${service}/snowbelle/key" = {
|
||||
owner = "blake";
|
||||
group = "blake";
|
||||
};
|
||||
"${service}/snowbelle/cert" = {
|
||||
owner = "blake";
|
||||
group = "blake";
|
||||
};
|
||||
};
|
||||
homelab.backups.baks = {
|
||||
${service} = { paths = [ config.services.syncthing.dataDir ]; };
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."${url}" = {
|
||||
extraConfig = ''
|
||||
tls /etc/ssl/blakedheld.xyz.crt /etc/ssl/blakedheld.xyz.key
|
||||
reverse_proxy 127.0.0.1:2222
|
||||
'';
|
||||
};
|
||||
|
||||
# add to glance (local service)
|
||||
homelab.glance.links.system = [{
|
||||
title = service;
|
||||
url = "https://${url}";
|
||||
error-url = "http://${homelab.host_ip}:2222";
|
||||
check-url = "http://${homelab.host_ip}:2222";
|
||||
icon = "di:${service}"; }];
|
||||
};
|
||||
}
|
||||
@@ -18,17 +18,41 @@ in {
|
||||
boot.kernelModules = ["zfs"];
|
||||
boot.supportedFilesystems = ["zfs"];
|
||||
|
||||
# arc cache size
|
||||
boot.kernelParams = [ "zfs.zfs_arc_max=12884901888" ];
|
||||
|
||||
# pools to import
|
||||
#boot.zfs.extraPools = [ "holocron" "holocron/archives" "/holocron/media" "/holocron/users" ];
|
||||
#boot.zfs.extraPools = [ "holocron" ];
|
||||
|
||||
# enable smart monitoring
|
||||
services.smartd.enable = true;
|
||||
services.smartd = {
|
||||
enable = true;
|
||||
autodetect = true;
|
||||
defaults.monitored = "-a -o on -s (S/../.././05|L/../01/./05)";
|
||||
notifications.mail = {
|
||||
enable = true;
|
||||
sender = "zfs@snowbelle.lan";
|
||||
};
|
||||
};
|
||||
|
||||
# enable zfs
|
||||
services.zfs = {
|
||||
autoScrub.enable = true;
|
||||
autoScrub.interval = "weekly";
|
||||
# email notifs
|
||||
zed = {
|
||||
enableMail = true;
|
||||
settings = {
|
||||
ZED_EMAIL_ADDR = ["root"];
|
||||
# send notification if scrub succeeds
|
||||
ZED_NOTIFY_VERBOSE = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# install userspace tools for acl's
|
||||
environment.systemPackages = with pkgs; [ nfs-utils ];
|
||||
environment.systemPackages = with pkgs; [smartmontools];
|
||||
|
||||
fileSystems."/holocron" = {
|
||||
device = "holocron";
|
||||
|
||||
@@ -3,16 +3,13 @@
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
}: let
|
||||
service = "";
|
||||
cfg = config.modules.services.${service};
|
||||
cfg = config.homelab.${service};
|
||||
sec = config.sops.secrets;
|
||||
homelab = config.homelab;
|
||||
in
|
||||
{
|
||||
options.modules.services.${service} = {
|
||||
in {
|
||||
options.homelab.${service} = {
|
||||
enable = lib.mkEnableOption "enables ${service}";
|
||||
|
||||
# set port options
|
||||
@@ -44,7 +41,6 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
# declare ${service} group
|
||||
users.groups.${service} = {
|
||||
gid = lib.mkForce cfg.ids;
|
||||
@@ -58,7 +54,7 @@ in
|
||||
home = cfg.data_dir;
|
||||
createHome = true;
|
||||
group = service;
|
||||
extraGroups = [ "media" ];
|
||||
extraGroups = ["media"];
|
||||
};
|
||||
|
||||
# enable the ${service} service
|
||||
@@ -85,7 +81,7 @@ in
|
||||
|
||||
# add to caddy for reverse proxy
|
||||
services.caddy.virtualHosts."${cfg.url}" = {
|
||||
serverAliases = [ "${service}.${homelab.public_domain}" ];
|
||||
serverAliases = ["${service}.${homelab.public_domain}"];
|
||||
extraConfig = ''
|
||||
tls /etc/ssl/blakedheld.xyz.crt /etc/ssl/blakedheld.xyz.key
|
||||
reverse_proxy 127.0.0.1:${toString cfg.port}
|
||||
@@ -118,9 +114,9 @@ in
|
||||
# };
|
||||
|
||||
# add to backups
|
||||
system.backups.baks = {
|
||||
homelab.backups.baks = {
|
||||
${service} = {
|
||||
paths = [ cfg.data_dir ];
|
||||
paths = [cfg.data_dir];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -44,6 +44,9 @@ in
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
# required
|
||||
environment.systemPackages = with pkgs; [ffmpeg_6-headless];
|
||||
|
||||
# declare ${service} group
|
||||
users.groups.${service} = { gid = lib.mkForce cfg.ids; };
|
||||
|
||||
|
||||
@@ -44,6 +44,9 @@ in
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
# required
|
||||
environment.systemPackages = with pkgs; [ffmpeg_6-headless];
|
||||
|
||||
# declare ${service} group
|
||||
users.groups.${service} = { gid = lib.mkForce cfg.ids; };
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ in
|
||||
./motd
|
||||
./backups
|
||||
./glance
|
||||
./postfix
|
||||
./caddy
|
||||
./home/zigbee2mqtt
|
||||
./vaultwarden
|
||||
|
||||
101
modules/homelab/postfix/default.nix
Normal file
101
modules/homelab/postfix/default.nix
Normal file
@@ -0,0 +1,101 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
service = "postfix";
|
||||
cfg = config.homelab.${service};
|
||||
sec = config.sops.secrets;
|
||||
homelab = config.homelab;
|
||||
in {
|
||||
options.homelab.${service} = {
|
||||
enable = lib.mkEnableOption "enables ${service}";
|
||||
|
||||
# set port options
|
||||
port = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 587;
|
||||
description = "set port for ${service} (default: ${toString cfg.port}";
|
||||
};
|
||||
url = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "${service}.${homelab.base_domain}";
|
||||
description = "set domain for ${service}";
|
||||
};
|
||||
data_dir = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/var/lib/${service}";
|
||||
description = "set data directory for ${service}";
|
||||
};
|
||||
ids = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = cfg.port;
|
||||
description = "set uid and pid of ${service} user (matches port by default)";
|
||||
};
|
||||
backup = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "enable backups for ${service}";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# declare ${service} group
|
||||
# users.groups.${service} = {
|
||||
# gid = lib.mkForce cfg.ids;
|
||||
# };
|
||||
#
|
||||
# # declare ${service} user
|
||||
# users.users.${service} = {
|
||||
# description = "${service} server user";
|
||||
# uid = lib.mkForce cfg.ids;
|
||||
# isSystemUser = true;
|
||||
# home = cfg.data_dir;
|
||||
# createHome = true;
|
||||
# group = service;
|
||||
# extraGroups = [];
|
||||
# };
|
||||
|
||||
# enable the ${service} service
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
relayHost = "smtp.gmail.com";
|
||||
relayPort = cfg.port;
|
||||
config = {
|
||||
#smtp_use_tls = "yes";
|
||||
smtp_tls_security_level = "may";
|
||||
smtp_sasl_auth_enable = "yes";
|
||||
smtp_sasl_security_options = "";
|
||||
smtp_sasl_password_maps = "texthash:${config.sops.secrets."postfix_passwd".path}";
|
||||
# optional: Forward mails to root (e.g. from cron jobs, smartd)
|
||||
# to me privately and to my work email:
|
||||
virtual_alias_maps = "inline:{ {root=me@blakedheld.xyz, throwedspam@gmail.com} }";
|
||||
};
|
||||
};
|
||||
|
||||
# override umask to make permissions work out
|
||||
# systemd.services.${service}.serviceConfig = {
|
||||
# UMask = lib.mkForce "0007";
|
||||
# User = service;
|
||||
# Group = service;
|
||||
#};
|
||||
|
||||
# open firewall
|
||||
networking.firewall.allowedTCPPorts = [ cfg.port ];
|
||||
|
||||
sops.secrets = {
|
||||
"${service}_passwd" = {
|
||||
owner = config.services.postfix.user;
|
||||
group = config.services.postfix.group;
|
||||
};
|
||||
};
|
||||
|
||||
# add to backups
|
||||
homelab.backups.baks = {
|
||||
${service} = {
|
||||
paths = [cfg.data_dir];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
100
modules/homelab/postfix/default.nix.icloud_attempt
Normal file
100
modules/homelab/postfix/default.nix.icloud_attempt
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
service = "postfix";
|
||||
cfg = config.homelab.${service};
|
||||
sec = config.sops.secrets;
|
||||
homelab = config.homelab;
|
||||
in {
|
||||
options.homelab.${service} = {
|
||||
enable = lib.mkEnableOption "enables ${service}";
|
||||
|
||||
# set port options
|
||||
port = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 587;
|
||||
description = "set port for ${service} (default: ${toString cfg.port}";
|
||||
};
|
||||
url = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "${service}.${homelab.base_domain}";
|
||||
description = "set domain for ${service}";
|
||||
};
|
||||
data_dir = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/var/lib/${service}";
|
||||
description = "set data directory for ${service}";
|
||||
};
|
||||
ids = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = cfg.port;
|
||||
description = "set uid and pid of ${service} user (matches port by default)";
|
||||
};
|
||||
backup = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "enable backups for ${service}";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# declare ${service} group
|
||||
# users.groups.${service} = {
|
||||
# gid = lib.mkForce cfg.ids;
|
||||
# };
|
||||
#
|
||||
# # declare ${service} user
|
||||
# users.users.${service} = {
|
||||
# description = "${service} server user";
|
||||
# uid = lib.mkForce cfg.ids;
|
||||
# isSystemUser = true;
|
||||
# home = cfg.data_dir;
|
||||
# createHome = true;
|
||||
# group = service;
|
||||
# extraGroups = [];
|
||||
# };
|
||||
|
||||
# enable the ${service} service
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
relayHost = "smtp.mail.me.com";
|
||||
relayPort = cfg.port;
|
||||
config = {
|
||||
smtp_tls_security_level = "may";
|
||||
smtp_sasl_auth_enable = "yes";
|
||||
smtp_sasl_security_options = "";
|
||||
smtp_sasl_password_maps = "texthash:${config.sops.secrets."postfix_passwd".path}";
|
||||
# optional: Forward mails to root (e.g. from cron jobs, smartd)
|
||||
# to me privately and to my work email:
|
||||
virtual_alias_maps = "inline:{ {root=me@blakedheld.xyz} }";
|
||||
};
|
||||
};
|
||||
|
||||
# override umask to make permissions work out
|
||||
# systemd.services.${service}.serviceConfig = {
|
||||
# UMask = lib.mkForce "0007";
|
||||
# User = service;
|
||||
# Group = service;
|
||||
#};
|
||||
|
||||
# open firewall
|
||||
networking.firewall.allowedTCPPorts = [ cfg.port ];
|
||||
|
||||
sops.secrets = {
|
||||
"${service}_passwd" = {
|
||||
owner = config.services.postfix.user;
|
||||
group = config.services.postfix.group;
|
||||
};
|
||||
};
|
||||
|
||||
# add to backups
|
||||
homelab.backups.baks = {
|
||||
${service} = {
|
||||
paths = [cfg.data_dir];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -6,10 +6,14 @@ klefki_auth_map: ENC[AES256_GCM,data:u8OBLtT/,iv:THW21BDyhyFIjcwixsAnaAODofxbuQZ
|
||||
tailscale_authkey: ENC[AES256_GCM,data:SU0k3asrJd+WZ86VbC4w8TDJp+MqsbyagrzCfDcgTzO5yvBjpWAKbJ7A+VxgQvdu4+S2jMYbdrONPp3YbQ==,iv:VMYmGVk5GpUQApKKQYhdOw/cYCXrXxEZJJwHfQL4MjQ=,tag:7ruaoCDxuFQ7tE/JLJ37Xw==,type:str]
|
||||
#ENC[AES256_GCM,data:bEbCic+ZDAA5ieNedCbiVbJrse17,iv:UwRYlis6NPB/RUcv+YnPxrGdbIcF4hrNiZt19YvWZNQ=,tag:m6PVlzPNnahX7X7KzMUj7A==,type:comment]
|
||||
borg_passwd: ENC[AES256_GCM,data:XOMJtr+DRs7xn5Iclc49iTzK9cFJyc/fSXJjhdKa9jdN,iv:YB8z7zNYjh6NpSxQb1TfPxAYUdzThdVfNZIe6tO5grA=,tag:bO6kZ3cLJDL4IQoWmGvRdg==,type:str]
|
||||
#ENC[AES256_GCM,data:VdbMrwGKUKNJHw==,iv:OLwBh6KQXR/H8eRgp/hH8k3QfIkK/ydL735kx/dpc8E=,tag:N+v+ym6RMbvW4IckbiLK8Q==,type:comment]
|
||||
syncthing:
|
||||
gui_passwd: ENC[AES256_GCM,data:CicGIe5dT8lJVchCcE4wg3E8va3RYR8d53MISkE=,iv:8ziDDyQvU8ABaKKwYlcHmvm8Qybk4G+q5F0Ghqluu9w=,tag:YlyNPE04KD3detL1QUTrgQ==,type:str]
|
||||
snowbelle:
|
||||
key: ENC[AES256_GCM,data:MrAc4RXi6h4WOboZgBRjggPNGUrQwM1Vu5N5aPYBxeBZPi2ut8OApWcA9apWzYZNQTFF5QCtCpG9W+1CLJRG701PRK1Wf01r5SDI8aIXkgc2MjXuzS/y/WIqWoPK1nmtjxTYqaDR68II2tc/P7hgtf2EwYPV2JP6v6cCihADOKvXW1pBxi9kMjZGcbY54IyUrOdNauDvaZRgCSP7xtg8aWf1FlmJbiQgMW2lK/f+8rc/3OGS+ieFt35h29Khl4rhuYGB6rgTwvDaWa9g60rPzVcg6tKw+Unef99pA+CQnhVJJIejKlC07pCdqdjCUc+w0oQ69cVoucWeHqlq3xA7IvYIGi9K+OFCLmsoqjMe/wUSC/r2s/nnqbXsgVx9j8j0,iv:2FoZwwzKUky02Z34KRVP/jPhOMXnLZh841+4lybsbCY=,tag:ZL5qh3OcFjiWgqtmTCUFkw==,type:str]
|
||||
cert: ENC[AES256_GCM,data:tvJX88ounzIzKmKcvEe0UtHrq51DMAIHGVZE2StqfNkn2QP+Er/geEh0wwmP9Q8+XBBjDT6oSAlWLjq6Tc1yYWSKju6Ig8GEJNDHL2UMVniBFzroSlO9hqZzbbNe1896WiwhhypvBoves7STTE7tJ2+Hzyss1BCYjcI+evGliJslq2nqxroMxIwBXfuDtxcTAeJ+SiKonY7W29NA05P1zYm6o6Td09VUS0cYWx2VUoP/8PMpeWLNciaHz8TjUeZ2Qob3pcNielu/VDqbunLvbFapqdV0hkl8gxgho+MmkC3+DXp/JDnG+vRm603wxqDECh6CNYc0CEXvM0/8gSXt6AkjATv6tBV98VeLknZkqVjBahtxrZuwquMuQbh1jD53RgsvnwB39FyFHZw29DGcUD0A7hIGnqSYVc2TXW+sgRxzXVFYsVrt1sWrYa2DpZT5zaFbps0dd194/j0SHOdf3p/4HF0GncWfTWLT89F/oAyJLio4X7yjES/DljgvmsrX0LdHnAYYAKDCWhZml3wSHBJ7Uvj1KiH2asxXkdiTPf8wulmwT+01hhBoX3QCkVYkdJpDbVddjLkwpLNyJATHctyuqzOdEMR4w5usTv9vKcgkMtbmxfWajb4lhjCpuaavkDUoI5h6eB8veXbZqAuX24bCvsLBWOVkg4qt1GGRqHx7+lfFanzMGyYYC/ufAXWD6eOOVsCjHJbHJoI16zq0HkfNpr30w+gO8hOyKgBP64anElzT3NB1sDi2GWxhSUKTDZ3rLsagPhZb3l3/u5SMf6lLWsY6IyFgPcVgY1snSOtd+PO9z9ipfyQZn4kKCtkNPPof8T58Qi7CP4KmVvbJsF67BH26SFclQLaJv5RO7e936vNwLrVhbyaclM0Vz6Y8wJvG4vW1Z4qPt6kP80NEATdrfwAr9nvZkb5rHqRWdxqIWSD5as+HPFzM/Mv0sBZ+B+CnsSv1btdB/iLacd032PGKXfZLxqGGOL1HIjM+QjSjaBTqrYcMke3GvnVfIujfdtcn9tOqGK+QYPS1CTYxWznmHloL2/WYwBY=,iv:qlIfrPxz7NvjkIXSkumfKvN0O1qq1S0T5j+37L8aReU=,tag:Qg8CYcDY/MaLWwNY566wBQ==,type:str]
|
||||
#ENC[AES256_GCM,data:A0ITyGOGMIoyVOcn5JOi1RAtqUM=,iv:+wWpmFbeLiX/Ae53pj0QmnYY3MEzOMib4cqbePUKtGI=,tag:JHXvrN4bOH+oD3Q70pUuew==,type:comment]
|
||||
pia_auth: ENC[AES256_GCM,data:rwAu4f5XVS4v4FCLj2zXAegIZeRPLIzUVv6TCrdfg9RGSDJYHgVAX0aFXCBQsDQju9RDycXmc9Id8IuyYN8=,iv:kEA4ADQyUI+zlQoZOKi81dw5BLE1oesqhVf6bfiLgB4=,tag:VHT2uPNW27F3KRM7ZhWdCw==,type:str]
|
||||
#ENC[AES256_GCM,data:7y1mtYNfbsagqtr66kOx2rinneEW3EZaCJIXzK0qjLX36g==,iv:8ozXuBYirLbKd8sCln2xv/WjhTojY85xU0cL5NVeMlQ=,tag:mclz0GfQ9j2EGWMiQ62QmA==,type:comment]
|
||||
openvpn_pia_mexico_config: ENC[AES256_GCM,data:59HQ3OZ0QKq92jI=,iv:DZTNvfi6kLXG7dsNkPcXUmXhAG2UdPZBy/L9eWNmRdE=,tag:ndxDDQNL2z1fjxFfU2VRwQ==,type:str]
|
||||
#ENC[AES256_GCM,data:mbIgMJBhL8nWJzl8q2dFL8XtO1Xa1Q==,iv:caYHYp1boK9wRgCcQe40HTWT/HxAIvYe+HyaruI53Vc=,tag:S6wowhAHObEcs7z8FimZ1g==,type:comment]
|
||||
wg_mex_key: ENC[AES256_GCM,data:vxDXixo6X6D33+p21L4hB0/yCH+TvMHZl991BkRsE/jdz7rzZuJF+zI7h+Q=,iv:8WR+feHXNUcat8DB2wY7wpos+P7TzgRF7rFD0fYosjY=,tag:p9b9ck0/VZjyLxtHut3n5Q==,type:str]
|
||||
#ENC[AES256_GCM,data:CO5nrcDbgymnEmCvuTexOBEMncuNM5lQ,iv:6HrxqSN6e7ODuz09MIFgPbIqDCKQySRDaKk5Wdu4HoQ=,tag:JBRjZeEdOg+trohfanO6Mg==,type:comment]
|
||||
@@ -22,6 +26,9 @@ minecraft_recpro_db_passwd: ENC[AES256_GCM,data:dPAkdEX0hBigo/lND2r3ShxnS4Jc5wTI
|
||||
#ENC[AES256_GCM,data:nbB5Cd7i/KTMCjCzcX8o1sxREZQ/gLAG,iv:iyuO2erxdJM08WHJBjKuNIXYxVhH7rfyOLTcGCcGqNQ=,tag:UeDszimXv8kQUmDetLeFqg==,type:comment]
|
||||
mosquitto_hashed_passwd: ENC[AES256_GCM,data:k1Lnr8ZTDpzXMoRmRH61X41boX/D8Rm1KPh7x3/IHFo+XKIOUQns53iA+7e7Ohp8uWSthDlOk4SlRvTXdUNiEz7Zmw9LYwy7BHbwpNo2pFApAye1ORPrMrhMUkUfgBgc8oqPPyRXmmrOAFp6GBbRhg==,iv:D8wQL9iF0rqOte5X24kDTVjYUJXbZSLz0Ykbp0HqmYo=,tag:RUCgO1uKPIdumSo563cg1Q==,type:str]
|
||||
mosquitto_passwd.yaml: ENC[AES256_GCM,data:9xwHiUaQ6zG/4rkRemXtbRJ/KEV4yajqyYlcXRR1eAQ2XijYOzitPjt53h3FPqp5rxl6dJerXNH5CiZZK3t1l339NxNseJFGVmIHitWJxNmGJMlG3M8r8Q==,iv:C6WWZuVkYaasB2pol3uf4Mc3d/lDEgt2pKX+dHl/Cr4=,tag:jYTC6RKF2TzDSwSUh6D8zQ==,type:str]
|
||||
#ENC[AES256_GCM,data:zmSByl0De3a39qLbS99oce7ORe2BBoPa+3I05/YYxL7iBeWCP3ZK,iv:6nUTBUFpNK7Mttckqu6Wk/QJ5cP4+iL+EH4ldaIuu9s=,tag:pc5UtjbNPsVOEMCdLKgGMA==,type:comment]
|
||||
postfix_passwd: ENC[AES256_GCM,data:3ndIsTGPyAQELM8lptBK241a3p77fNijXma4souFKnyrkLBpZ4OP6KWuldFlWySpSG7Yme0by5gOzg==,iv:nYuJKeY4H3OfQleLo7gvheT5JHgXW3hGQvjHeEEN260=,tag:q952E/0QLC49O5Rwua0RWQ==,type:str]
|
||||
#ENC[AES256_GCM,data:UcpnHZj5xr8P64PzhWVKbFy8pvFM9GCz2mDoW/6iRVqgLTL0FSn6KXep/kfLEnYiqv5ZpsVZjjXsbI5VRJfBo7w4kzX661oDU8323DfQHDkbo2g=,iv:nEApgutl5kjfZkwi9WTOwatraM3+TQqFgk5gEMw0rwA=,tag:Q4gndL+6q7jHN02QCpJDjw==,type:comment]
|
||||
#ENC[AES256_GCM,data:3oMbbBSrbjrqsdiON1ENB8JeKW0=,iv:+/eL/51OA+VHbkWWSNzQId5BlxnMm+5NBA0uKw010Tk=,tag:vBJpCYmvFivBYIKatDWgHw==,type:comment]
|
||||
copyparty_passwd: ENC[AES256_GCM,data:I3UYy4nJ0B6RnIp661O0VVqEmxloxxcroBKmNFcgoQ==,iv:sWkPfKqomrNaYFZbn+BeQEugRMlaqi1qJhELqfsGCik=,tag:Sgz56ZW9EY49zfwFDN7whg==,type:str]
|
||||
#ENC[AES256_GCM,data:3ATkokBKeOp97uORzaePROrKKfG94ic=,iv:MNJRh6Vrso1heqNUJc0M4xGNcMLGwcF9IzoiQ5+SS+g=,tag:xj8Actwkirvq4GE+Ly1M9w==,type:comment]
|
||||
@@ -47,7 +54,7 @@ sops:
|
||||
U0tmdFBuZnJES3piOTZNV0VKQmQ0eVUKCWRQ/flLzmpC64WyLoipklZBmrkpYiUg
|
||||
PRu+itNolpPTHm96pe+P93g2iP0wgekG0cX21wkiU2xaLF3dY2FEIA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-10-17T08:24:51Z"
|
||||
mac: ENC[AES256_GCM,data:kIlrr+U7+O1Ocdi8CffmQNOQYh46crnaaQHBOkeOwG4AuAErNb1UjhZiOUELYD6bTG4GnIw0QGAS6xu+C22aA/jKsg/Z0q/LjX3FPDLLmLyEXhjIDVB+DOsxUsUWupZqGOq+HoBWuVYt11kc2ylPqqC5JlxNwQpIXGa1YgsKaNQ=,iv:L813P4Zvse38E2+K1wv0kTrPYgaKQc0rAleGGfhJRyA=,tag:k0v2ApQincLnu1Pd3WOkGw==,type:str]
|
||||
lastmodified: "2025-10-24T02:40:54Z"
|
||||
mac: ENC[AES256_GCM,data:1x21LVoE1T/0+cKPiTpfsExWFzCpTQN3BTL2I5LmCX1qlH6s/2zW7LxVrqnVFYcoM+MNjJ/2e0Srp13HDCwxpnjuOYYsEL6fpaZJVOta9IFQYZc5UyZ8fgblt8+F3e6o4fu4ZrweqtFanAknQ0yqFXg7yEwAm+yoRRJOnSc7LI4=,iv:/vZ6DZ7qWqifuZaIFF454oNb4KO7s5AZ4O2hez3aJcA=,tag:WVtfBO6wpKEcCe5VhY2CRw==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
useUserPackages = true;
|
||||
useGlobalPkgs = true;
|
||||
users = {
|
||||
"blake" = import ./dots/bundles/snowbelle.nix;
|
||||
"blake" = import ./home.nix;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -3,14 +3,24 @@
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [];
|
||||
home.packages = with pkgs; [nwg-displays];
|
||||
|
||||
wayland.windowManager.hyprland = if pkgs.system == "x86_64-darwin" then {} else {
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.variables = ["--all"];
|
||||
};
|
||||
|
||||
#
|
||||
home.sessionVariables = if pkgs.system == "x86_64-darwin" then {} else {
|
||||
home.pointerCursor = {
|
||||
gtk.enable = true;
|
||||
# x11.enable = true;
|
||||
package = pkgs.posy-cursors;
|
||||
name = "posy";
|
||||
size = 48;
|
||||
};
|
||||
|
||||
xdg.configFile."hypr/hyprland.conf" = {
|
||||
source = config.lib.file.mkOutOfStoreSymlink "/home/blake/.nix/users/blake/dots/hypr/hyprland.conf";
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
40
users/blake/dots/hyprland/hypridle.conf
Normal file
40
users/blake/dots/hyprland/hypridle.conf
Normal file
@@ -0,0 +1,40 @@
|
||||
# --- general settings ---
|
||||
general {
|
||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||
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.
|
||||
}
|
||||
|
||||
# --- dim screen ---
|
||||
listener {
|
||||
timeout = 150 # 2.5min.
|
||||
on-timeout = brightnessctl -s set 1 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = brightnessctl -r # monitor backlight restore.
|
||||
}
|
||||
|
||||
# --- blank screen ---
|
||||
listener {
|
||||
timeout = 330 # 5.5min
|
||||
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.
|
||||
}
|
||||
|
||||
# --- lock screen ---
|
||||
listener {
|
||||
timeout = 900 # 15min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
# --- suspend timeout ---
|
||||
listener {
|
||||
timeout = 1800 # 30min
|
||||
on-timeout = systemctl suspend # suspend pc
|
||||
}
|
||||
|
||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||
#listener {
|
||||
# timeout = 150 # 2.5min.
|
||||
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||
#}
|
||||
|
||||
279
users/blake/dots/hyprland/hyprland.conf
Normal file
279
users/blake/dots/hyprland/hyprland.conf
Normal file
@@ -0,0 +1,279 @@
|
||||
# blake's hyprland config
|
||||
|
||||
# Please note not all available settings / options are set here.
|
||||
# For a full list, see the wiki ; )
|
||||
|
||||
# --- displays ---
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
# currently being managed by nwg-displays
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
#monitor = eDP-1,preferred,0x0,1
|
||||
#monitor = HDMI-A-1,3840x2160@60,auto-left,1.5
|
||||
#monitor = HDMI-A-1,3840x2160@60,-2560x0,1.5
|
||||
#monitor = DP-6,1920x1080@120,auto,1
|
||||
#monitor = HDMI-A-1,referred,0x-1080,1
|
||||
|
||||
# workspaces
|
||||
# currently being managed by nwg-displays
|
||||
source = ~/.config/hypr/workspaces.conf
|
||||
#workspace = 1, monitor:eDP-1
|
||||
#workspace = 2, monitor:desc:Philips Consumer Electronics Company PHL 278E1 0x0000032B
|
||||
|
||||
# --- auto-launch ---
|
||||
exec-once = hyprpaper
|
||||
exec-once = waybar
|
||||
exec-once = dunst
|
||||
exec-once = hypridle
|
||||
exec-once = wl-paste --type text --watch cliphist store #clipboard history text data
|
||||
exec-once = wl-paste --type image --watch cliphist store #clipboard history image data
|
||||
exec-once = /usr/lib/polkit-kde-authentication-agent-1
|
||||
|
||||
# --- settings ---
|
||||
|
||||
# Source a file (multi-file configs)
|
||||
# source = ~/.config/hypr/myColors.conf
|
||||
|
||||
# Set programs that you use
|
||||
$terminal = kitty
|
||||
$fileManager = lf
|
||||
$menu = tofi-drun --drun-launch=true --prompt-text="launch:"
|
||||
$browser = firefox
|
||||
|
||||
|
||||
# --- enviroment variables ---
|
||||
|
||||
# sharp text in firefox
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
|
||||
# xdg info
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
|
||||
# cursors
|
||||
env = HYPRCURSOR_THEME,posy-hypr
|
||||
env = HYPRCURSOR_SIZE,48
|
||||
env = XCURSOR_THEME,posy
|
||||
env = XCURSOR_SIZE,48
|
||||
|
||||
# themes
|
||||
env = GTK_THEME,gradient-dark-gtk
|
||||
env = QT_QPA_PLATFORMTHEME,qt6ct # change to qt6ct if you have that
|
||||
env = QT_STYLE_OVERRIDE,gtk2
|
||||
|
||||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options =
|
||||
kb_rules =
|
||||
numlock_by_default = true
|
||||
|
||||
follow_mouse = 2
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad {
|
||||
disable_while_typing = yes
|
||||
natural_scroll = yes
|
||||
clickfinger_behavior = yes
|
||||
tap-to-click = yes
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
general {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
gaps_in = 2
|
||||
gaps_out = 5
|
||||
border_size = 3
|
||||
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
col.inactive_border = rgba(595959aa)
|
||||
|
||||
layout = dwindle
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
# disables cursor warping to focused window
|
||||
|
||||
}
|
||||
|
||||
decoration {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
rounding = 3
|
||||
|
||||
blur {
|
||||
enabled = true
|
||||
size = 3
|
||||
passes = 1
|
||||
}
|
||||
|
||||
# drop_shadow = yes
|
||||
# shadow_range = 4
|
||||
# shadow_render_power = 3
|
||||
# col.shadow = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = yes
|
||||
|
||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||
|
||||
animation = windows, 1, 7, myBezier
|
||||
animation = windowsOut, 1, 7, default, popin 80%
|
||||
animation = border, 1, 10, default
|
||||
animation = borderangle, 1, 8, default
|
||||
animation = fade, 1, 7, default
|
||||
animation = workspaces, 1, 6, default
|
||||
}
|
||||
|
||||
dwindle {
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = yes # you probably want this
|
||||
}
|
||||
|
||||
master {
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
# new_is_master = true
|
||||
}
|
||||
|
||||
gestures {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
workspace_swipe = on
|
||||
}
|
||||
|
||||
misc {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
force_default_wallpaper = -1 # Set to 0 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
focus_on_activate = true
|
||||
}
|
||||
|
||||
# --- window rules ---
|
||||
windowrulev2 = float,class:(kitty),title:(pulsemixer)
|
||||
#windowrulev2 = float,center,size 30%,class:(kitty),title:(bluetuith)
|
||||
|
||||
|
||||
# floating audio controls
|
||||
|
||||
#windowrulev2 = float,class:(kitty),title:(pulsemixer)
|
||||
#windowrulev2 = center,class:(kitty),title:(pulsemixer)
|
||||
#windowrulev2 = size 80%,class:(kitty),title:(pulsemixer)
|
||||
|
||||
# floating network controls
|
||||
#windowrulev2 = float,class:floating
|
||||
#windowrulev2 = float,class:(kitty),title:(nmtui)
|
||||
#windowrulev2 = size 100 100,class:(kitty),title:(nmtui)
|
||||
#windowrulev2 = center,class:(kitty),title:(nmtui)
|
||||
|
||||
# floating bluetooth controls
|
||||
#windowrulev2 = float,class:(kitty),title:(bluetuith)
|
||||
#windowrulev2 = size 70%,class:(kitty),title:(bluetuith)
|
||||
#windowrulev2 = center,class:(kitty),title:(bluetuith)
|
||||
|
||||
|
||||
# --- bindings ---
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||
$mainMod = SUPER
|
||||
|
||||
|
||||
# system
|
||||
bind = $mainMod, Q, exec, loginctl lock-session
|
||||
|
||||
# programs
|
||||
bind = $mainMod, Return, exec, $terminal
|
||||
bind = $mainMod, E, exec, kitty $fileManager
|
||||
bind = $mainMod, R, exec, $menu
|
||||
bind = $mainMod, B, exec, $browser
|
||||
bind = $mainMod, K, exec, hyprpicker --autocopy --format=hex
|
||||
bind = $mainMod, T, exec, cliphist list | tofi | cliphist decode | wl-copy # clipboard history
|
||||
|
||||
# screenshots
|
||||
bind = , print, exec, hyprshot --mode region --output-folder ~/pictures/screenshots # region capture
|
||||
bind = $mainMod, print, exec, hyprshot --mode window --output-folder ~/pictures/screenshots # window capture
|
||||
bind = shift, print, exec, hyprshot --mode output --output-folder ~/pictures/screenshots # monitor capture
|
||||
|
||||
# multimedia
|
||||
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bind = , XF86AudioPlay, exec, playerctl play-pause
|
||||
|
||||
# brightness
|
||||
bind = , XF86MonBrightnessUp, exec, brightnessctl set +10%
|
||||
bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- --min-value
|
||||
|
||||
# scratch pad
|
||||
bind = $mainMod, S, togglespecialworkspace, magic
|
||||
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||
|
||||
# general window management (https://wiki.hyprland.org/Configuring/Binds/ for more)
|
||||
bind = $mainMod, C, killactive
|
||||
bind = $mainMod SHIFT, M, exit
|
||||
bind = $mainMod, V, togglefloating
|
||||
bind = $mainMod, F, fullscreen, 1 # maximize
|
||||
bind = $mainMod SHIFT, F, fullscreen, 0 # full screen proper
|
||||
bind = $mainMod, P, pseudo # dwindle
|
||||
bind = $mainMod, J, togglesplit # dwindle
|
||||
|
||||
# window switching
|
||||
bind = $mainMod, tab, cyclenext
|
||||
bind = $mainMod, left, movefocus, l
|
||||
bind = $mainMod, right, movefocus, r
|
||||
bind = $mainMod, up, movefocus, u
|
||||
bind = $mainMod, down, movefocus, d
|
||||
|
||||
# window moving
|
||||
bind = $mainMod SHIFT, left, swapwindow, l
|
||||
bind = $mainMod SHIFT, right, swapwindow, r
|
||||
bind = $mainMod SHIFT, up, swapwindow, u
|
||||
bind = $mainMod SHIFT, down, swapwindow, d
|
||||
|
||||
# window resizing X Y
|
||||
bind = $mainMod CTRL, left, resizeactive, -60 0
|
||||
bind = $mainMod CTRL, right, resizeactive, 60 0
|
||||
bind = $mainMod CTRL, up, resizeactive, 0 -60
|
||||
bind = $mainMod CTRL, down, resizeactive, 0 60
|
||||
|
||||
# workspace switching
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# window workspace moving
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# window managment with mouse
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# waybar
|
||||
bind = $mainMod, N, exec, pkill -SIGUSR1 waybar # hide waybar
|
||||
bind = $mainMod SHIFT, N, exec, pkill -SIGUSR2 waybar # reload waybar
|
||||
94
users/blake/dots/hyprland/hyprlock.conf
Normal file
94
users/blake/dots/hyprland/hyprlock.conf
Normal file
@@ -0,0 +1,94 @@
|
||||
$font = Ubuntu Mono Regular
|
||||
|
||||
# GENERAL
|
||||
general {
|
||||
disable_loading_bar = true
|
||||
hide_cursor = true
|
||||
}
|
||||
|
||||
# BACKGROUND
|
||||
background {
|
||||
monitor =
|
||||
path = ~/pictures/wallpapers/antartica.png
|
||||
blur_passes = 1
|
||||
color = rgb(0047ab)
|
||||
}
|
||||
|
||||
# TIME
|
||||
label {
|
||||
monitor =
|
||||
text = cmd[update:30000] echo "$(date +"%R")"
|
||||
color = rgb(ffffff)
|
||||
font_size = 90
|
||||
font_family = $font
|
||||
position = -130, -100
|
||||
halign = right
|
||||
valign = top
|
||||
shadow_passes = 1
|
||||
}
|
||||
|
||||
# DATE
|
||||
label {
|
||||
monitor =
|
||||
text = cmd[update:43200000] echo "$(date +"%Y/%m/%d")"
|
||||
color = $text
|
||||
font_size = 25
|
||||
font_family = $font
|
||||
position = -130, -250
|
||||
halign = right
|
||||
valign = top
|
||||
shadow_passes = 2
|
||||
}
|
||||
|
||||
# KEYBOARD LAYOUT
|
||||
label {
|
||||
monitor =
|
||||
text = $LAYOUT
|
||||
color = rbg(ffffff)
|
||||
font_size = 20
|
||||
font_family = $font
|
||||
rotate = 0 # degrees, counter-clockwise
|
||||
|
||||
position = -130, -310
|
||||
halign = right
|
||||
valign = top
|
||||
shadow_passes = 2
|
||||
}
|
||||
|
||||
# USER AVATAR
|
||||
image {
|
||||
monitor =
|
||||
path = ~/pictures/pfps/pikacig.png
|
||||
size = 350
|
||||
border_color = rgb(0047ab)
|
||||
rounding = -1
|
||||
|
||||
position = 0, 85
|
||||
halign = center
|
||||
valign = center
|
||||
shadow_passes = 2
|
||||
}
|
||||
|
||||
# INPUT FIELD
|
||||
input-field {
|
||||
monitor =
|
||||
size = 400, 70
|
||||
outline_thickness = 4
|
||||
dots_size = 0.2
|
||||
dots_spacing = 0.2
|
||||
dots_center = true
|
||||
outer_color = $accent
|
||||
inner_color = $surface0
|
||||
font_color = $text
|
||||
fade_on_empty = false
|
||||
placeholder_text = # <span foreground="##$textAlpha"><i> Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
|
||||
hide_input = false
|
||||
check_color = rgb(0047ab)
|
||||
fail_color = rgb(ff0000)
|
||||
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
|
||||
capslock_color = rgb(ff0000)
|
||||
position = 0, -185
|
||||
halign = center
|
||||
valign = center
|
||||
shadow_passes = 2
|
||||
}
|
||||
5
users/blake/dots/hyprland/hyprpaper.conf
Normal file
5
users/blake/dots/hyprland/hyprpaper.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
preload = ~/pictures/wallpapers/antartica.png
|
||||
# wallpaper = eDP-1,~/pictures/wallpapers/antartica.png
|
||||
wallpaper = ,~/pictures/wallpapers/antartica.png
|
||||
ipc = off
|
||||
splash = false
|
||||
@@ -4,10 +4,12 @@
|
||||
pkgs,
|
||||
inputs,
|
||||
system,
|
||||
current_system,
|
||||
...
|
||||
}: let
|
||||
|
||||
platform = if pkgs.system == "x86_64-darwin" then "darwin" else "nixos";
|
||||
platform = if builtins.pathExists "/System/Library/CoreServices" then "darwin" else "nixos";
|
||||
#platform = if current_system "x86_64-darwin" then "darwin" else "nixos";
|
||||
|
||||
# general config
|
||||
home_linux = {
|
||||
@@ -22,7 +24,7 @@ in
|
||||
{
|
||||
imports = [
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
./os/${platform}
|
||||
./os/${platform}.nix
|
||||
./dots/neovim
|
||||
./dots/lf
|
||||
./dots/zsh
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
|
||||
{
|
||||
imports = [
|
||||
../../home.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
htop
|
||||
sl
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user