Compare commits

..

86 Commits

Author SHA1 Message Date
2d09cfeea1 openrgb 2025-11-27 02:18:43 -06:00
892ae40180 weird 2025-11-23 17:29:03 -06:00
4a1cd4804d default 2025-11-23 17:27:21 -06:00
31fa6033b0 once more 2025-11-23 16:50:07 -06:00
b88445e529 set graphical 2025-11-23 16:43:30 -06:00
e3597c147a no desktop for server 2025-11-23 16:34:22 -06:00
e1e1b316cf bar 2025-11-13 19:27:26 -06:00
184e939bb6 only use domains you own publicly dummy 2025-11-13 19:26:40 -06:00
103c8e803a quickshell work 2025-11-09 18:02:29 -06:00
160ae56e03 quickshell 2025-11-08 12:24:02 -06:00
d178e340b4 no option 2025-11-08 12:24:02 -06:00
e2ec5cae11 uninclude 2025-11-08 12:24:02 -06:00
d9261385de packages 2025-11-08 12:24:02 -06:00
b0c84b9b27 no option 2025-11-08 12:24:02 -06:00
d036eb2512 include 2025-11-08 12:24:02 -06:00
83f48b3403 fix 2025-11-08 12:22:32 -06:00
9d56a9bd10 change domain name 2025-11-08 12:22:32 -06:00
86272d668d start on quickshell 2025-10-16 17:11:21 -05:00
7f224bd6fc finish later 2025-10-08 17:25:39 -05:00
3d0bd560fb fix bar colors 2025-09-17 10:21:26 -05:00
214c833821 dont include the directory 2025-09-16 12:45:51 -05:00
8e519e9ad1 conflicting binds 2025-09-16 12:10:34 -05:00
a706f7c5cb new Wallpaper 2025-09-16 11:46:39 -05:00
f49edaf975 bind for wallpaper 2025-09-16 11:44:28 -05:00
8545cccd46 tested 2025-09-16 11:42:16 -05:00
6e28e26d5a tested 2025-09-16 10:39:44 -05:00
538b6051e2 no quotes 2025-09-16 10:21:33 -05:00
91f6c637de scripts 2025-09-16 10:08:03 -05:00
0280315031 interpolate 2025-09-16 09:32:03 -05:00
54dd1d2321 escape 2025-09-16 08:50:27 -05:00
7d77da5619 fix 2025-09-16 00:59:15 -05:00
668e6117fd big hyprland changes 2025-09-15 22:35:05 -05:00
9cb4e51316 manage wallpaper without hyprpanel 2025-09-10 12:44:40 -05:00
43fde8741b fix 2025-09-10 12:22:58 -05:00
feec4dd416 try no systemd 2025-09-10 12:08:48 -05:00
9a1a025ec9 no extra desktops 2025-09-10 10:25:41 -05:00
20731b35ca fix 2025-09-10 10:20:05 -05:00
784a783fff no unstable 2025-09-09 09:33:54 -05:00
65f7cad037 use wifi dummy 2025-09-09 09:04:13 -05:00
bd1cfad6f9 try 2025-09-08 18:47:49 -05:00
154dd13425 no unstable server 2025-09-08 18:33:04 -05:00
504ae33109 option 2025-09-08 18:20:44 -05:00
d07fbe229b dont include pihole 2025-09-08 18:18:43 -05:00
632362235b update 2025-09-08 14:14:12 -05:00
9e11e7cb70 hypridle 2025-09-08 14:09:00 -05:00
0829506111 unstable 2025-09-08 14:07:00 -05:00
ee6893038a try unstable 2025-09-08 13:39:49 -05:00
02156b877e no idle 2025-09-08 10:35:07 -05:00
64a2588a11 fix 2025-09-07 21:51:02 -05:00
b9d3b14b23 stuff 2025-09-07 21:34:45 -05:00
f17ac4ce4f user service 2025-09-07 21:09:49 -05:00
bce5fdf68a force no idle 2025-09-07 21:06:00 -05:00
bd1323c2d8 package 2025-09-07 14:45:01 -05:00
5ad050b056 do NOT idle! 2025-09-07 14:39:01 -05:00
d4a11b9ba2 fix 2025-09-06 23:41:07 -05:00
86f16a2394 openwebui 2025-09-06 23:30:14 -05:00
35fa4a55da script better 2025-09-05 12:15:56 -05:00
bb9f3f390f update 2025-09-04 20:44:44 -05:00
e2de1c34e3 function 2025-09-04 20:28:30 -05:00
6f7f078dd9 fix 2025-09-04 20:27:11 -05:00
8e3092fc0f bind 2025-09-03 17:28:42 -05:00
f5ba6bf991 help 2025-09-03 14:42:44 -05:00
2cd6e41686 pkexec 2025-09-03 13:00:26 -05:00
0a87520fe7 not relative to current system 2025-09-03 12:33:23 -05:00
c5f1cb3624 sudo 2025-09-03 10:28:22 -05:00
1520b9872b scratchpad name 2025-09-02 12:47:12 -05:00
6fba3fd698 lf 2025-09-02 12:35:45 -05:00
cf67655b3d only finegrained with offload 2025-09-01 18:54:23 -05:00
e441f92216 fine 2025-09-01 18:51:48 -05:00
bf5df9d23a try 2025-09-01 18:48:38 -05:00
4a79ac63d7 try open nvidia drivers 2025-09-01 18:42:08 -05:00
f7c4059445 specialize 2025-09-01 17:45:31 -05:00
cbd4b177ba try 2025-09-01 07:34:52 -05:00
97a62eaa24 live 2025-08-31 22:01:30 -05:00
eeb29a80f4 fix 2025-08-31 21:42:27 -05:00
6b98345a97 work on live 2025-08-31 14:53:21 -05:00
c3457da03c prepare live 2025-08-31 14:07:21 -05:00
85c96cd78b scripts 2025-08-31 13:27:12 -05:00
9698873c0b fonts please 2025-08-31 10:07:36 -05:00
6be91c5617 shutdown behavior 2025-08-31 09:38:48 -05:00
32d95647f8 this should work 2025-08-30 23:39:52 -05:00
c811e4d4df font 2025-08-30 23:11:03 -05:00
4eeed736ad spellcheck 2025-08-30 21:13:09 -05:00
325e4c63d5 fonts please 2025-08-30 21:09:52 -05:00
6474b10e9f sddm theme 2025-08-30 15:42:34 -05:00
0ce461f34d syntax 2025-08-30 13:32:09 -05:00
67 changed files with 1921 additions and 492 deletions

View File

@@ -15,6 +15,10 @@ creation_rules:
key_groups:
- age:
- *laptop
- path_regex: live/secrets.yaml$
key_groups:
- age:
- *laptop
- path_regex: nathan/secrets.yaml$
key_groups:
- age:

80
flake.lock generated
View File

@@ -40,11 +40,11 @@
]
},
"locked": {
"lastModified": 1756115622,
"narHash": "sha256-iv8xVtmLMNLWFcDM/HcAPLRGONyTRpzL9NS09RnryRM=",
"lastModified": 1757255839,
"narHash": "sha256-XH33B1X888Xc/xEXhF1RPq/kzKElM0D5C9N6YdvOvIc=",
"owner": "nix-community",
"repo": "disko",
"rev": "bafad29f89e83b2d861b493aa23034ea16595560",
"rev": "c8a0e78d86b12ea67be6ed0f7cae7f9bfabae75a",
"type": "github"
},
"original": {
@@ -61,11 +61,11 @@
},
"locked": {
"dir": "pkgs/firefox-addons",
"lastModified": 1756353808,
"narHash": "sha256-JkCqOE0kjWbT7GnXgngL+baLF/OeeVfPCh71HXfRh6g=",
"lastModified": 1757304222,
"narHash": "sha256-s070stByAXxeCLgftTXxFxZ2ynJhghne4Y6cTuqGAaw=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "e47914363ccacc95994b567966d7fa1e25dd85ec",
"rev": "fa312c0175ffb82bc67da095439b9cb683ac52bd",
"type": "gitlab"
},
"original": {
@@ -212,11 +212,11 @@
]
},
"locked": {
"lastModified": 1756245065,
"narHash": "sha256-aAZNbGcWrVRZgWgkQbkabSGcDVRDMgON4BipMy69gvI=",
"lastModified": 1756679287,
"narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "54b2879ce622d44415e727905925e21b8f833a98",
"rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8",
"type": "github"
},
"original": {
@@ -271,11 +271,11 @@
]
},
"locked": {
"lastModified": 1755678602,
"narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=",
"lastModified": 1756891319,
"narHash": "sha256-/e6OXxzbAj/o97Z1dZgHre4bNaVjapDGscAujSCQSbI=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "157cc52065a104fc3b8fa542ae648b992421d1c7",
"rev": "621e2e00f1736aa18c68f7dfbf2b9cff94b8cc4d",
"type": "github"
},
"original": {
@@ -300,11 +300,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1756372920,
"narHash": "sha256-dPvJtc+YqUZ0CQao0DtOH5eF33YWPnpu2SP+ce5H7zU=",
"lastModified": 1757322502,
"narHash": "sha256-/91c40cXye2No6YQZcoXaMcIDqGkdE0hmRPC4SSTlRU=",
"ref": "refs/heads/main",
"rev": "4b2bfbd85f1ea77a165d9ba92d62016cdf3abfcd",
"revCount": 6398,
"rev": "b619f39555b96c70330f4a933dedde7e897e0d81",
"revCount": 6413,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
@@ -424,11 +424,11 @@
]
},
"locked": {
"lastModified": 1753622892,
"narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=",
"lastModified": 1756810301,
"narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809",
"rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"type": "github"
},
"original": {
@@ -550,11 +550,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1756406526,
"narHash": "sha256-N2bpIuvXq1vjFU9+CeHu3JMmWYrD9m6mtjx/iWZpxio=",
"lastModified": 1757296734,
"narHash": "sha256-NRkbte52DMPcDbWEM823CJSApImXLIzRmWCKMMhYVbA=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
"rev": "b0e55f47b8729227eccc8bdb8de2459ac14f69ed",
"rev": "e2915ee5edd4da1fa076ba155f1d539be78340fb",
"type": "github"
},
"original": {
@@ -592,11 +592,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1756266583,
"narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=",
"lastModified": 1757068644,
"narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2",
"rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github"
},
"original": {
@@ -655,11 +655,11 @@
},
"nixpkgs-us": {
"locked": {
"lastModified": 1756266583,
"narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=",
"lastModified": 1762363567,
"narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2",
"rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4",
"type": "github"
},
"original": {
@@ -687,11 +687,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1756217674,
"narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=",
"lastModified": 1757244434,
"narHash": "sha256-AeqTqY0Y95K1Fgs6wuT1LafBNcmKxcOkWnm4alD9pqM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620",
"rev": "092c565d333be1e17b4779ac22104338941d913f",
"type": "github"
},
"original": {
@@ -740,17 +740,17 @@
"nixvim": "nixvim_2"
},
"locked": {
"lastModified": 1756234794,
"narHash": "sha256-objBSkdkrn6BpQ1mH1tkvXmipfJ+mONHuydefPhdNSs=",
"lastModified": 1760575893,
"narHash": "sha256-u6eyhxtlxgG29uI2VCSt5Ir6/BW9hkhglCTfbJ14Hgg=",
"ref": "refs/heads/master",
"rev": "50ffcb48e2bc7e18fd7123c876158b913300b177",
"revCount": 35,
"rev": "bcc5185ef433a77b18f5aa585ee79d97f9a8e69c",
"revCount": 36,
"type": "git",
"url": "https://gitea.blunkall.us/Blunkall-Technologies/Moirai"
"url": "ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai"
},
"original": {
"type": "git",
"url": "https://gitea.blunkall.us/Blunkall-Technologies/Moirai"
"url": "ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai"
}
},
"nixvim_2": {
@@ -846,11 +846,11 @@
]
},
"locked": {
"lastModified": 1755960406,
"narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=",
"lastModified": 1757239681,
"narHash": "sha256-E9spYi9lxm2f1zWQLQ7xQt8Xs2nWgr1T4QM7ZjLFphM=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2",
"rev": "ab82ab08d6bf74085bd328de2a8722c12d97bd9d",
"type": "github"
},
"original": {

View File

@@ -39,7 +39,8 @@
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
nixvim.url = "git+https://gitea.blunkall.us/Blunkall-Technologies/Moirai";
#nixvim.url = "git+https://gitea.esotericbytes.com/Blunkall-Technologies/Moirai";
nixvim.url = "git+ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai";
};
@@ -92,6 +93,8 @@
specialArgs = {
inputs = inputs // {
nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
};
};
modules = [
@@ -104,6 +107,8 @@
specialArgs = {
inputs = inputs // {
nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
};
};
modules = [
@@ -116,6 +121,8 @@
specialArgs = {
inputs = inputs // {
nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
};
};
modules = [
@@ -130,6 +137,7 @@
inputs = inputs // {
nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
};
};
modules = [

View File

@@ -16,9 +16,14 @@
];
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ] && [ -z ''$DRY_RUN ]]; then
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
@@ -32,8 +37,8 @@
};
extraConfig = (if config.homeconfig.host == "laptop" then ''
monitor=eDP-1,1920x1080@300,0x0,1
bind = CTRL SHIFT, XF86Launch2, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
bind = CTRL SHIFT, XF86Launch2, exec, bash -c 'if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then pkexec --user root /nix/var/nix/profiles/system/bin/switch-to-configuration switch; else pkexec --user root /nix/var/nix/profiles/system/specialisation/docked/bin/switch-to-configuration switch; fi'
bind = ALT, Escape, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
'' else if config.homeconfig.host == "homebox" then ''
monitor=HDMI-A-2,1920x1080@60,0x0,1
monitor=HEADLESS-2,1920x1080@60,0x0,1
@@ -52,6 +57,8 @@
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
'';
};

View File

@@ -13,6 +13,40 @@
services.hypridle = {
enable = true;
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 --instance 0 dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 150; # 2.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 = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl --instance 0 dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl --instance 0 dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800; # 30min
on-timeout = "systemctl suspend"; # suspend pc
}
];
};
};
};
}

View File

@@ -9,7 +9,6 @@
programs.hyprpanel = {
enable = true;
};
};
}

View File

@@ -5,6 +5,7 @@
./bash
./eza
./fzf
./lf
./tmux
./kitty
./zoxide

View File

@@ -0,0 +1,7 @@
{ ... }: {
config = {
programs.lf = {
enable = true;
};
};
}

View File

Before

Width:  |  Height:  |  Size: 1007 KiB

After

Width:  |  Height:  |  Size: 1007 KiB

View File

@@ -1,27 +0,0 @@
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl --instance 0 dispatch dpms on # to avoid having to press a key twice to turn on the display.
}
listener {
timeout = 150 # 2.5min.
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = brightnessctl -r # monitor backlight restore.
}
listener {
timeout = 300 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 330 # 5.5min
on-timeout = hyprctl --instance 0 dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl --instance 0 dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
}
listener {
timeout = 1800 # 30min
on-timeout = systemctl suspend # suspend pc
}

View File

@@ -20,7 +20,7 @@ source = ~/.cache/wal/colors-hypr.conf
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_layout = us,jp
kb_variant =
kb_model =
kb_options =
@@ -48,7 +48,7 @@ general {
col.active_border = $color1 $color5 100deg
col.inactive_border = $color0
layout = dwindle
layout = master
}
decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more
@@ -101,12 +101,19 @@ gestures {
misc {
disable_hyprland_logo = false
disable_splash_rendering = true
force_default_wallpaper = 2
force_default_wallpaper = 0
}
ecosystem {
no_update_news = true
no_donation_nag = true
}
# Binds
$mainMod = ALT
bind = CTRL SHIFT, H, exec, colorPrefix kitty -e 'bash -c "hyprctl binds | less"'
bind = $mainMod SHIFT, E, exec, colorPrefix kitty
bind = $mainMod, B, exec, firefox
@@ -122,7 +129,7 @@ bind = $mainMod SHIFT, R, exec, colorPrefix kitty -e _homeRebuild
bind = $mainMod, F, exec, thunar
bind = $mainMod SHIFT, F, fullscreen
bind = $mainMod, semicolon, exec, colorPrefix kitty -e nvim ~
bind = $mainMod SHIFT, semicolon, exec, colorPrefix kitty -e lf
bind = $mainMod, Insert, exec, libreoffice
@@ -134,9 +141,11 @@ bind = , Menu, exec, rofi -show drun
bind = $mainMod, Menu, exec, hyprpanel -q; hyprpanel
bind = $mainMod, P, pseudo, # dwindle
#bind = $mainMod, P, pseudo, # dwindle
#bind = $mainMod, Z, togglesplit, # dwindle
bind = $mainMod, Z, togglesplit, # dwindle
bind = $mainMod, N, layoutmsg, rollnext # master
bind = $mainMod, P, layoutmsg, rollprev # master
bind = $mainMod, M, exec, spotify
@@ -165,11 +174,13 @@ bind = $mainMod, Return, exec, discord --enable-features=UseOzonePlatform --ozon
bind = $mainMod CTRL, Return, exec, firefox https://discord.com/app
bind = , Home, exec, setWallpaper
# Move focus with mainMod + arrow keys
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, J, movefocus, u
bind = $mainMod, K, movefocus, d
bind = $mainMod, W, movefocus, u
bind = $mainMod, A, movefocus, l
bind = $mainMod, S, movefocus, d
bind = $mainMod, D, movefocus, r
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
@@ -202,6 +213,24 @@ bind = $mainMod SHIFT, Home, movetoworkspace, 11
bind = $mainMod, right, workspace, e+1
bind = $mainMod, left, workspace, e-1
bind = $mainMod, H, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod, H, workspace, e-1
bind = $mainMod, J, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod, J, workspace, e+1
bind = $mainMod, K, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod, K, workspace, e-1
bind = $mainMod, L, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod, L, workspace, e+1
bind = $mainMod SHIFT, H, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod SHIFT, H, movetoworkspace, e-1
bind = $mainMod SHIFT, J, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod SHIFT, J, movetoworkspace, e+1
bind = $mainMod SHIFT, K, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod SHIFT, K, movetoworkspace, e-1
bind = $mainMod SHIFT, L, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod SHIFT, L, movetoworkspace, e+1
#switch network connections
bind = CTRL SHIFT, Escape, exec, nmcli device down wlo1
bind = CTRL SHIFT, 0, exec, nmcli connection up Hotspot
@@ -227,36 +256,32 @@ bind = CTRL ALT, Delete, exec, loginctl kill-session self
# Move/resize windows with mainMod + LMB/RMB and dragging
bind = $mainMod SHIFT, J, movewindow, u
bind = $mainMod SHIFT, K, movewindow, d
bind = $mainMod SHIFT, H, movewindow, l
bind = $mainMod SHIFT, L, movewindow, r
bind = $mainMod SHIFT, W, movewindow, u
bind = $mainMod SHIFT, A, movewindow, l
bind = $mainMod SHIFT, S, movewindow, d
bind = $mainMod SHIFT, D, movewindow, r
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod SHIFT, mouse:272, resizewindow
$scratchpadsize = size 60% 80%
$scratchpad = class:^(scratchpad)$
windowrulev2 = float, $scratchpad
windowrulev2 = $scratchpadsize, $scratchpad
windowrulev2 = workspace special silent, $scratchpad
$kitty = class:^(scratchpad-kitty)$
windowrulev2 = float, $kitty
windowrulev2 = $scratchpadsize, $kitty
windowrulev2 = workspace special silent, $kitty
$nvim = class:^(scratchpad-nvim)$
windowrulev2 = float, $nvim
windowrulev2 = $scratchpadsize, $nvim
windowrulev2 = workspace special silent, $nvim
$lf = class:^(scratchpad-lf)$
windowrulev2 = float, $lf
windowrulev2 = $scratchpadsize, $lf
windowrulev2 = workspace special silent, $lf
$cal = class:^(scratchpad-calendar)$
$cal = class:^(scratchpad-cal)$
windowrulev2 = float, $cal
windowrulev2 = $scratchpadsize, $cal
windowrulev2 = workspace special silent, $cal
bind = $mainMod, N, exec, colorPrefix pypr toggle nvim
bind = $mainMod, semicolon, exec, colorPrefix pypr toggle lf
bind = $mainMod, E, exec, colorPrefix pypr toggle kitty
bind = $mainMod, C, exec, colorPrefix pypr toggle calendar

View File

@@ -3,19 +3,19 @@
"scratchpads"
]
[scratchpads.nvim]
[scratchpads.lf]
animation = "fromTop"
command = "kitty --class scratchpad-nvim -e nvim ~/Projects"
command = "kitty --class scratchpad-lf -e lf ~"
lazy = false
class = "scratchpad"
class = "scratchpad-lf"
margin = 100
multi = true
excludes = "*"
[scratchpads.kitty]
animation = "fromBottom"
command = "kitty --class scratchpad -e tmux"
class = "scratchpad"
command = "kitty --class scratchpad-kitty -e tmux"
class = "scratchpad-kitty"
lazy = false
margin = 100
multi = true
@@ -23,8 +23,8 @@
[scratchpads.calendar]
animation = "fromTop"
command = "kitty --class scratchpad -e calcurse"
class = "scratchpad"
command = "kitty --class scratchpad-cal -e calcurse"
class = "scratchpad-cal"
lazy = false
margin = 100
multi = true

View File

@@ -3,7 +3,7 @@
"theme.font.label": "FiraCode Nerd Font Mono Medium",
"theme.bar.floating": true,
"bar.layouts": {
"0": {
"*": {
"left": [
"dashboard",
"workspaces",
@@ -28,47 +28,18 @@
"notifications",
"power"
]
},
"1": {
"left": [
"dashboard",
"workspaces",
"windowtitle"
],
"middle": [
"media"
],
"right": [
"volume",
"clock",
"notifications"
]
},
"2": {
"left": [
"dashboard",
"workspaces",
"windowtitle"
],
"middle": [
"media"
],
"right": [
"volume",
"clock",
"notifications"
]
}
},
"theme.bar.opacity": 50,
"wallpaper.image": "/nix/store/ph7zbz3pfc1z3yr8blyp2gvmpd111hnm-hm_Wallpaper/bluescape.jpg",
"wallpaper.enable": true,
"wallpaper.image": "/tmp/nathan/bg",
"wallpaper.enable": false,
"theme.matugen_settings.scheme_type": "content",
"theme.matugen_settings.variation": "standard_2",
"theme.matugen": true,
"bar.launcher.autoDetectIcon": true,
"bar.network.truncation_size": 10,
"bar.bluetooth.label": false,
"bar.clock.showIcon": false,
"bar.clock.format": "%A %H:%M:%S %m/%d/%C%y",
"bar.notifications.show_total": true,
"bar.notifications.hideCountWhenZero": true,

View File

@@ -0,0 +1,37 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell
Item {
implicitWidth: t.contentWidth + 10
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
id: t
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: {
if(hws.toplevels.values.length > 0) {
return Hyprland.activeToplevel.title
} else {
return " Desktop"
}
}
property HyprlandWorkspace hws: Hyprland.focusedWorkspace
onHwsChanged: {
Hyprland.refreshToplevels()
Hyprland.refreshWorkspaces()
}
font.pointSize: 11
}
}
}

View File

@@ -0,0 +1,170 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
PanelWindow {
anchors {
top: true
//left: true
//right: true
//bottom: true
}
id: bar
exclusionMode: ExclusionMode.Ignore
WlrLayershell.layer: WlrLayer.Background
color: "#a0706050"
implicitHeight: 40
implicitWidth: 1900
/*RowLayout {
width: bar.width
}*/
RowLayout {
//Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
id: left
x: 0
y: parent.y + (parent.height - height) / 2
//width: center.x
spacing: 0
Launcher {
id: l
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.preferredWidth: width
Layout.margins: 5
}
Workspaces {
id: ws
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
}
/*ActiveWindow {
id: aw
Layout.margins: 5
Layout.maximumWidth: Math.min(implicitWidth, center.x - (parent.x + x + Layout.margins))
}*/
}
RowLayout {
//Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
id: center
x: (parent.width - cl.width) / 2 + parent.x - centerLeft.width
//y: parent.y + (parent.height - height) / 2
y: parent.y + (parent.height - height) / 2
spacing: 0
RowLayout {
id: centerLeft
spacing: 0
Volume {
id: v
window: bar
popupOffset: center.x
Layout.margins: 5
}
Battery {
id: bat
window: bar
popupOffset: center.x
Layout.margins: 5
}
Hyprsunset {
id: hs
Layout.margins: 5
}
}
Clock {
id: cl
Layout.margins: 5
}
IdleInhibitor {
id: ii
Layout.margins: 5
}
Wifi {
id: wifi
window: bar
Layout.margins: 5
}
Bluetooth {
id: bt
window: bar
popupOffset: center.x + center.width
Layout.margins: 5
}
}
RowLayout {
//Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
id: right
//implicitWidth: bar.width - (spacer.x + spacer.width)
x: bar.width - implicitWidth
y: parent.y + (parent.height - height) / 2
//Layout.maximumWidth: bar.width - (center.x + center.width)
//Layout.preferredWidth: 10
spacing: 0
Media {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
id: media
implicitWidth: Math.min(textWidth, bar.width - (righter.width) - (center.x + center.width) - 10)
Layout.margins: 5
}
RowLayout {
id: righter
spacing: 0
Tray {
id: tray
window: bar
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
popupOffset: right.x + righter.x + x
}
Notifications {
id: notif
window: bar
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
}
Power {
id: power
window: bar
popupOffset: bar.width
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
}
}
}
}

View File

@@ -0,0 +1,71 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Services.UPower
ClippingWrapperRectangle {
radius: 5
width: 100; height: 30
color: "red"
Button {
id: button
text: "󰁹 " + Math.floor(UPower.displayDevice.percentage * 100) + "%"
font.pointSize: 12
implicitHeight: parent.height
//icon.color: "red"
//icon.source: "/nix/store/c4dcn4vl0v5njv4d587sazrad1xgyd9h-rose-pine-icon-theme-unstable-2022-09-01/share/icons/rose-pine/symbolic/devices/battery-symbolic.svg"
onClicked: {
menu.visible = true
grab.active = true
}
}
required property var window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,141 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Bluetooth
ClippingWrapperRectangle {
radius: 5
implicitWidth: 30; implicitHeight: 30
Button {
id: button
text: ""
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
required property PanelWindow window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset - width
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
ClippingWrapperRectangle {
radius: 5
implicitWidth: parent.width - 2 * Layout.margins
implicitHeight: 30
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
color: "#ff3333aa"
RowLayout {
Text {
text: 'Bluetooth'
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
}
Switch {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
//Layout.margins: 5
checked: Bluetooth.defaultAdapter.enabled
onClicked: Bluetooth.defaultAdapter.enabled = checked
}
}
}
ScrollView {
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
implicitWidth: parent.width - 4 * Layout.margins
implicitHeight: menu.height / 2
id: scroll
ColumnLayout {
spacing: 0
Repeater {
id: rep
model: Bluetooth.devices.values
ClippingWrapperRectangle {
radius: 5
color: "#ff3333aa"
implicitWidth: menu.width - 3 * scroll.x
implicitHeight: 40
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
RowLayout {
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
text: rep.model[index].name
}
Button {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.rightMargin: 5
text: 'Connect'
onClicked: rep.model[index].connected = !rep.model[index].connected
}
}
}
}
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,27 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell
Item {
implicitWidth: t.contentWidth + 10
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
id: t
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: Qt.formatDateTime(clock.date, "dddd HH:mm:ss MM/dd/yyyy")
font.pointSize: 11
SystemClock {
id: clock
precision: SystemClock.Seconds
}
}
}
}

View File

@@ -0,0 +1,30 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
radius: 5
implicitWidth: 30; height: 30
Button {
id: button
text: "󰛨 "
font.pointSize: 16
Process {
id: idlent
running: false
command: ["hyprsunset", "-t", "4000"]
onExited: {
running = button.text == "󰛨 " ? false : true
}
}
onClicked: {
idlent.running = button.text == "󰛨 " ? true : false
button.text = button.text == "󰛨 " ? "󱩌 " : "󰛨 "
}
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,34 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
property real interval: 100
id: root
radius: 5
implicitWidth: 30; height: 30
Button {
id: button
text: "󰒲 "
font.pointSize: 16
Process {
id: idlent
running: false
command: ["systemd-inhibit", "--what=idle", "sleep", root.interval.toString()]
onExited: {
running = button.text == "󰒲 " ? false : true
}
}
onClicked: {
idlent.running = button.text == "󰒲 " ? true : false
button.text = button.text == "󰒲 " ? "󰒳 " : "󰒲 "
}
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,22 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
radius: 5
width: 30; height: 30
Button {
id: button
text: " "
font.pointSize: 16
Process {
id: launcher
running: false
command: ["rofi", "-show", "drun"]
}
onClicked: launcher.running = true
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,48 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.Mpris
import Quickshell.Widgets
Item {
id: media
height: 30
readonly property real textWidth: info.contentWidth + 10
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
id: info
text: {
let s = ''
let players = []
Mpris.players.values.forEach((p) => {
if(p.isPlaying) players.push(p)
})
if(players[0]?.trackTitle) {
s += players[0].trackTitle
}
if(players[0]?.trackAlbum) {
s += ' - ' + players[0].trackAlbum
}
if(players[0]?.trackArtist) {
s += ' - ' + players[0].trackArtist
}
media.visible = players.length > 0
return s
}
font.pointSize: 11
}
}
}

View File

@@ -0,0 +1,183 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.Notifications
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
Item {
width: 50
height: 30
ClippingWrapperRectangle {
id: barbutton
radius: 5
anchors.fill: parent
Button {
id: button
text: "󰂚"
//text: server.trackedNotifications.values.length == 0 ? "󰂚" : '󱅫 ' + server.trackedNotifications.values.length
//icon.source: ''
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
NotificationServer {
id: server
persistenceSupported: true
imageSupported: true
actionsSupported: true
bodyImagesSupported: true
bodySupported: true
bodyHyperlinksSupported: true
inlineReplySupported: true
actionIconsSupported: true
onNotification: (n) => {
n.tracked = true
console.log(n?.body)
button.text = '󱅫 ' + (server.trackedNotifications.values.length + 1)
}
}
required property PanelWindow window
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: window.width - width
anchor.rect.y: 50
implicitWidth: 400
implicitHeight: 1080 - anchor.rect.y
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
color: "#ff706050"
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
id: lay
spacing: 10
ClippingWrapperRectangle {
radius: 5
Layout.margins: 5
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
implicitWidth: menu.width - 2 * Layout.margins
RowLayout {
width: parent.width
Text {
Layout.margins: 5
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: 'Notifications'
}
Button {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
implicitWidth: 20
implicitHeight: 20
text: 'x'
onClicked: {
while(server.trackedNotifications.values.length > 0) {
server.trackedNotifications.values[0].dismiss()
}
}
}
}
}
Repeater {
id: rep
model: server.trackedNotifications.values
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
radius: 10
implicitWidth: parent.width - 2 * Layout.margins
implicitHeight: 100
MouseArea {
anchors.fill: parent
RowLayout {
Image {
//anchors.fill: parent
source: {
let icon = rep.model[index].image
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon
}
Layout.maximumWidth: 100
Layout.maximumHeight: 100
}
ColumnLayout {
Layout.topMargin: 10
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
text: rep.model[index].summary
Layout.leftMargin: 10
font.pointSize: 14
}
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: rep.model[index].body
Layout.leftMargin: 10
font.pointSize: 12
}
}
}
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: mouse => {
if(mouse.button == Qt.LeftButton) {
button.text = rep.count - 1 <= 0 ? "󰂚" : '󱅫 ' + (rep.count - 1)
rep.model[index].dismiss()
//button.text = server.trackedNotifications.values.length == 0 ? "󰂚" : '󱅫 ' + server.trackedNotifications.values.length
} else if(mouse.button == Qt.RightButton) {
}
}
}
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,96 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Widgets
Item {
width: 30
height: 30
id: root
required property PanelWindow window
required property real popupOffset
ClippingWrapperRectangle {
radius: 5
width: 30; height: 30
Button {
id: button
text: " "
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 150
implicitHeight: 250
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'reboot'
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'logout'
}
Button {
Layout.bottomMargin: 10
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'sleep'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,62 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.SystemTray
import Quickshell.Widgets
Item {
implicitWidth: 10 + rep.count * (2 * lay.spacing + 20)
height: 30
visible: SystemTray.items.values.length != 0
id: root
required property var window
required property real popupOffset
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
RowLayout {
id: lay
spacing: 4
Repeater {
id: rep
model: SystemTray.items
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
radius: 10
implicitWidth: 20
implicitHeight: 20
MouseArea {
anchors.fill: parent
Image {
anchors.fill: parent
source: {
let icon = SystemTray.items.values[index].icon
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon
}
}
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: (mouse) => {
if(mouse.button == Qt.LeftButton) {
SystemTray.items.values[index].activate()
} else if(mouse.button == Qt.RightButton) {
SystemTray.items.values[index].display(root.window, popupOffset, 40)
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,97 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Services.Pipewire
ClippingWrapperRectangle {
radius: 5
width: 100; height: 30
Button {
id: button
text: " " + Math.floor(Pipewire.defaultAudioSink?.audio?.volume * 100) + "%"
font.pointSize: 12
implicitHeight: parent.height
PwObjectTracker {
objects: [ Pipewire.defaultAudioSink ]
}
onClicked: {
menu.visible = true
grab.active = true
}
}
required property var window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ScrollView {
ColumnLayout {
spacing: 0
Text {
text: 'Output Devices'
}
ColumnLayout {
}
Text {
text: 'Input Devices'
}
ColumnLayout {
/*Repeater {
id: in
model: {
set = []
Pipewire.nodes.values.forEach(n => { !n.isSink && !n.isStream ? set.push(n) : return })
return set
}
Text {
text: in.model[index].nickname
}
}*/
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,72 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Widgets
Item {
implicitWidth: 30
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Button {
id: button
text: "󰤨 "
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
property var window: null
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: root.parent.x + root.parent.width - width
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,46 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Widgets
Item {
implicitWidth: 10 + rep.count * (2 * lay.spacing + 25)
implicitHeight: 30
Component.onCompleted: Hyprland.refreshWorkspaces()
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
RowLayout {
id: lay
Repeater {
id: rep
property var ws: {
let arr = [];
Hyprland.workspaces.values.forEach((w) => { if(w.id > 0) arr.push(w) })
return arr;
}
model: ws
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
radius: 10
implicitWidth: 25
Button {
background: Rectangle {
color: Hyprland.focusedWorkspace.id == rep.model[index].id ? "#ffff00ff" : "#ff7744dd"
anchors.fill: parent
}
text: rep.model[index].id
onClicked: rep.model[index].activate()
}
}
}
}
}
}

View File

@@ -0,0 +1,14 @@
//@ pragma Env QS_NO_RELOAD_POPUP=1
//@ pragma Env QSG_RENDER_LOOP=threaded
//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000
//@ pragma UseQApplication
import Quickshell // for ShellRoot
import qs.modules
ShellRoot {
Bar {
id: bar
}
}

View File

@@ -3,6 +3,7 @@
pkgs-us = import inputs.nixpkgs-us {
inherit system;
config.allowUnfree = true;
};
in {
@@ -23,6 +24,9 @@
};
home.packages = with pkgs; ([
inputs.disko.packages.${pkgs.system}.disko-install
kjv
openssh
sops
@@ -50,7 +54,7 @@
xfce.thunar
wl-clipboard
blueberry
lxqt.lxqt-policykit
pkgs-us.quickshell
] else []) ++ (if !config.homeconfig.minimal then [
cava
android-tools
@@ -75,7 +79,7 @@
#unfree {
geogebra
spotify
discord
pkgs-us.discord
#}
pkgs-us.rustdesk-flutter
pkgs-us.mpv

View File

@@ -19,73 +19,97 @@
(pkgs.writeShellScriptBin "randWallpaper" ''
file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1)
setWallpaper /home/nathan/Pictures/Wallpaper/$file
file=''$(ls ${config.home.homeDirectory}/Pictures/Wallpaper/ | shuf -n 1)
setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/''$file
'')
(pkgs.writeShellScriptBin "setWallpaper" ''
img=''$(realpath ''${1:-~/.config/background})
chmod 600 ~/.config/background
${pkgs.hyprpanel}/bin/hyprpanel sw ''$img
changeColors ''$img ''$2
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
img=''$(realpath "''${1:-$(find ~/Pictures/Wallpaper/* | rofi -dmenu)}")
n=''$(basename "''$img")
ext="''${n''\#''\#*.}"
if [[ ''$ext == "gif" || ''$ext == "mp4" ]]; then
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" -vframes 1 /tmp/nathan/tmp.jpg
cp /tmp/nathan/tmp.jpg /tmp/nathan/tmp2.jpg
pidof mpvpaper && pkill mpvpaper
${pkgs.swww}/bin/swww img /tmp/nathan/tmp.jpg -t wipe
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp2.jpg
sleep 0.3
hyprctl dispatch exec "${pkgs.mpvpaper}/bin/mpvpaper ALL ''$img -o loop"
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp.jpg
rm /tmp/nathan/tmp2.jpg
else
pidof mpvpaper && pkill mpvpaper
hyprctl dispatch exec "${pkgs.swww}/bin/swww img ''$img -t wipe"
${pkgs.hyprpanel}/bin/hyprpanel sw "''$img"
fi
changeColors "''$img" "''$2"
'')
(pkgs.writeShellScriptBin "changeColors" ''
if [[ $(ls ~/.config/ | grep bga) != bga ]]; then
echo 100 > ~/.config/bga
img=''$(realpath "''$1")
alpha=''${2:-70}
if [[ ''$alpha -lt 0 ]]; then
alpha=0
elif [[ ''$alpha -gt 100 ]]; then
alpha=100
fi
alpha=''${2:-`cat ~/.config/bga`}
img=''$(realpath ''${1:-~/.config/background})
if [[ $alpha -lt 0 ]]; then
$alpha=0
if [[ -f ~/.config/wal/colorschemes/dark/''$(basename "''$img")-''$alpha.json ]]; then
${pkgs.pywal16}/bin/wal -n -f "''$(basename "''$img")-''$alpha"
else
${pkgs.pywal16}/bin/wal -n -i "''$img" -a "''$alpha" --cols16 -p "''$(basename "''$img")-''$alpha"
fi
if [[ $alpha -gt 100 ]]; then
$alpha=100
fi
${pkgs.pywal16}/bin/wal -i $img -a $alpha --cols16 -n
echo $alpha > ~/.config/bga
sleep 0.4
${pkgs.pywalfox-native}/bin/pywalfox update &
[[ $(pidof cava) != "" ]] && pkill -USR1 cava &
for i in $(ls /run/user/1000 | grep nvim); do ${pkgs.neovim-remote}/bin/nvr -s --servername /run/user/1000/$i --remote-send '<cmd>colorscheme pywal<CR>'; done
pkill -USR1 kitty
'')
(pkgs.writeShellScriptBin "onSystemStart" ''
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
hyprctl dispatch exec "randWallpaper && chmod 600 ${config.home.homeDirectory}/.config/background"
fi
hyprctl dispatch exec ${pkgs.pyprland}/bin/pypr
hyprctl dispatch exec ${pkgs.netbird-ui}/bin/netbird-ui
hyprctl dispatch exec ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent
hyprctl setcursor Bibata-Modern-Classic 16
sleep 3
hyprctl reload
#tmux new-session -s hyprland
colorPrefix
'')
(pkgs.writeShellScriptBin "colorPrefix" ''
exec -a "$0" "$@" &
sleep 0.4 && changeColors &
sleep 0.4
${pkgs.pywalfox-native}/bin/pywalfox update &
pkill -USR1 kitty
pidof cava && pkill -USR1 cava
for i in ''$(ls /run/user/1000 | grep nvim); do
${pkgs.neovim-remote}/bin/nvr -s --servername /run/user/1000/''$i --remote-send '<cmd>colorscheme pywal<CR>';
done
'')
(pkgs.writeShellScriptBin "onSystemStart" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then
rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid
fi
hyprctl --batch "\
dispatch exec ${pkgs.swww}/bin/swww-daemon ;\
dispatch exec setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ;\
dispatch exec ${pkgs.pyprland}/bin/pypr ;\
dispatch exec ${pkgs.netbird-ui}/bin/netbird-ui ;\
dispatch exec ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent ;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
hyprctl dispatch exec ${pkgs.pyprland}/bin/pypr toggle calendar
#tmux new-session -s hyprland
'')
] ++ (if config.homeconfig.standalone.enable then [
(pkgs.writeShellScriptBin "_homeRebuild" ''
${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/Olympus
${pkgs.nh}/bin/nh home switch --ask
echo //////Enter to close//////
read
'')

View File

@@ -1,19 +1,19 @@
{ config, lib, pkgs, inputs, ... }: {
imports = [
./ags
./git
./nh
./hyprland
./hyprpanel
./terminal
./rofi
./pywal
./swaylock
./hyprlock
./calcurse
./firefox
];
config = {
config = lib.mkIf (config.homeconfig.host != "android") {
home.packages = lib.mkIf (!config.homeconfig.wal.enable) [
inputs.nixvim.packages.${pkgs.system}.default

View File

@@ -31,6 +31,7 @@
search = {
default = "ddg";
privateDefault = "ddg";
force = true;
};
bookmarks = {
force = true;

View File

@@ -15,6 +15,18 @@
pyprland
];
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
wayland.windowManager.hyprland = {
enable = true;
@@ -24,18 +36,29 @@
variables = [ "--all" ];
};
extraConfig = let
monitor = if config.homeconfig.host == "laptop" then ''
monitor=eDP-1,1920x1080@60,0x0,1
extraConfig = (if config.homeconfig.host == "laptop" then ''
monitor=eDP-1,1920x1080@300,0x0,1
bind = CTRL SHIFT, XF86Launch2, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
'' else if config.homeconfig.host == "homebox" then ''
monitor=HDMI-A-2,1920x1080@60,0x0,1
monitor=HEADLESS-2,1920x1080@60,0x0,1
exec-once=hyprctl output create headless HEADLESS-2
exec-once=hyprctl keyword monitor HDMI-A-2,disable
exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2
'' else '''';
in monitor + ''
source = /home/nathan/.config/hypr/main.conf
'' else if config.homeconfig.host == "container" then ''
monitor=HEADLESS-2,1920x1080@60,0x0,1
exec-once=hyprctl output create headless HEADLESS-2
exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2
'' else ''
monitor= , prefered, auto, 1
'') + (if config.homeconfig.hyprpanel.enable then ''
bind = , Print, exec, bash -c ${pkgs.hyprpanel}/share/scripts/screenshot.sh"
'' else ''
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
'';
};

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }: {
options.homeconfig.hyprlock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.homeconfig.hyprlock.enable {
programs.hyprlock = {
enable = true;
};
services.hypridle = {
enable = true;
};
};
}

View File

@@ -0,0 +1,15 @@
{ config, lib, ... }: {
options.homeconfig.hyprpanel.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
config = lib.mkIf config.homeconfig.hyprpanel.enable {
programs.hyprpanel = {
enable = true;
systemd.enable = false;
};
};
}

View File

@@ -8,7 +8,6 @@
config = lib.mkIf config.homeconfig.wal.enable {
home.packages = with pkgs; [
inputs.nixvim.packages.${pkgs.system}.pywal
pywal16

View File

@@ -1,12 +0,0 @@
{ config, lib, pkgs, ... }: {
options.homeconfig.swaylock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.homeconfig.swaylock.enable {
home.packages = with pkgs; [ swaylock-effects ];
};
}

View File

@@ -5,7 +5,6 @@
programs.bash = {
enable = true;
enableCompletion = true;
blesh.enable = true;
shellAliases = {
ls = "eza";
@@ -18,7 +17,11 @@
};
initContent = if config.homeconfig.wal.enable then (lib.mkBefore ''
bashrcExtra = ''
source ${pkgs.blesh}/share/blesh/ble.sh
'';
initExtra = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''

View File

@@ -2,11 +2,14 @@
imports = [
./bat
./bash
./eza
./fzf
./tmux
./kitty
./zoxide
./zsh
./ssh
./ohmyposh
];
}

View File

@@ -0,0 +1,132 @@
{ config, lib, pkgs, ... }: {
home.packages = with pkgs; [
oh-my-posh
];
programs.zsh = {
initContent = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
};
home.file.".config/wal/templates/ohmyposh.toml".text = ''
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[blocks.segments.properties]
style = 'full'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[palette]
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
}

View File

@@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }: {
programs.ssh = {
enable = true;
};
}

View File

@@ -1,9 +1,5 @@
{ config, lib, pkgs, ... }: {
home.packages = with pkgs; [
oh-my-posh
];
programs.zsh = {
enable = true;
@@ -23,6 +19,8 @@
vi = "nvim";
vim = "nvim";
python = "python3.13";
python3 = "python3.13";
};
history = {
@@ -31,128 +29,5 @@
ignoreSpace = true;
share = true;
};
initContent = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
};
home.file.".config/wal/templates/ohmyposh.toml".text = ''
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[blocks.segments.properties]
style = 'full'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[palette]
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
}

View File

@@ -1,6 +1,5 @@
{ ... }: {
imports = [
./mpd
./wayvnc
];
}

View File

@@ -1,36 +0,0 @@
{ config, lib, pkgs, inputs, ... }: {
options.homeconfig.wayvnc.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
disabledModules = [
];
imports = [
(import "${inputs.home-manager-us}/modules/services/wayvnc.nix" {
inherit config;
inherit lib;
pkgs = (import inputs.nixpkgs-us { system = "x86_64-linux"; });
})
];
config = lib.mkIf config.homeconfig.wayvnc.enable {
home.packages = with pkgs; [
novnc
];
services.wayvnc = {
enable = true;
autoStart = true;
settings = {
address = "0.0.0.0";
port = 5900;
};
};
};
}

View File

@@ -0,0 +1 @@
{ ... }: { config = {}; }

View File

@@ -27,8 +27,6 @@
hardware = {
graphics.enable = true;
nvidia = {
modesetting.enable = true;
open = false;
@@ -42,11 +40,11 @@
services = {
xserver = {
#enable = true;
enable = false;
videoDrivers = ["nvidia"];
};
displayManager = {
enable = true;
enable = false;
defaultSession = "hyprland";
autoLogin = {
enable = true;
@@ -54,6 +52,11 @@
};
};
pulseaudio.enable = false;
hardware.openrgb = {
enable = true;
motherboard = "amd";
};
};
systemd.extraConfig = "DefaultLimitNOFILE=2048";
@@ -85,7 +88,7 @@
nat = {
enable = true;
internalInterfaces = [ "ve-+" ];
externalInterface = "enp6s0";
externalInterface = "wlp7s0";
};
};
@@ -118,7 +121,7 @@
sysconfig = {
remoteBuildHost = true;
host = "homebox";
graphical = true;
graphical = false;
users = {
nathan = {
extraGroups = [ "wheel" "networkmanager" ];
@@ -133,20 +136,23 @@
{
homeconfig = {
minimal = false;
hyprland.enable = true;
hyprlock.enable = true;
hyprland.enable = false;
hyprlock.enable = false;
wal.enable = true;
mpd.enable = true;
hyprpanel.enable = true;
hyprpanel.enable = false;
calcurse.enable = true;
rofi.enable = true;
firefox.enable = true;
rofi.enable = false;
firefox.enable = false;
git.enable = true;
nh.enable = true;
};
home.packages = [
pkgs.wayvnc
services.hypridle.enable = lib.mkForce false;
home.packages = with pkgs; [
wayvnc
openrgb
];
}
];
@@ -163,15 +169,15 @@
};
programs = {
hyprland.enable = true;
hyprpanel.enable = true;
hyprland.enable = false;
hyprpanel.enable = false;
steam.enable = false;
};
virtualization = {
traefik.enable = true;
jellyfin.enable = true;
"blunkall.us".enable = true;
"esotericbytes.com".enable = true;
nextcloud.enable = true;
ntfy.enable = false;
gitea.enable = true;
@@ -179,6 +185,7 @@
keycloak.enable = true;
netbird.enable = true;
ollama.enable = true;
openwebui.enable = true;
homeassistant.enable = true;
wyoming = {
enable = true;
@@ -187,9 +194,9 @@
faster-whisper = true;
};
rustdesk.enable = false; #broken
pihole.enable = false; #broken
#pihole.enable = false; #broken
code-server.enable = false;
novnc.enable = true;
novnc.enable = false;
minecraft.enable = true;
sandbox.enable = false;

View File

@@ -1,4 +1,4 @@
{ config, pkgs, inputs, modulesPath, ... }: {
{ lib, pkgs, inputs, modulesPath, ... }: {
imports = with inputs; [
@@ -10,24 +10,32 @@
config = {
nixpkgs.hostPlatform = "x86_64-linux";
fonts.fontconfig.enable = lib.mkForce true;
boot = {
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
fonts.packages = with pkgs; [ nerd-fonts.fira-code ];
environment.systemPackages = with pkgs; [ nerd-fonts.fira-code ];
system.stateVersion = "25.05";
nixpkgs.hostPlatform = "x86_64-linux";
users.users."nathan" = {
hashedPassword = "$y$j9T$F0pn6l4C45lz4a0FTZLqE0$Fc48Ptbmz/3MJCk/Jsaqop4ff.bY3J3GcjhmJx5R7k6";
packages = with pkgs; [
git
inputs.disko.packages.${pkgs.system}.disko
inputs.disko.packages.${pkgs.system}.disko-install
nerd-fonts.fira-code
];
};
users.users.nixos.enable = lib.mkForce false;
services.getty.autologinUser = lib.mkForce null;
networking = {
nameservers = [ "1.1.1.1" "1.0.0.1" ];
networkmanager.enable = true;
};
programs.zsh.enable = true;
environment.shells = with pkgs; [ zsh bashInteractive ];
@@ -67,7 +75,7 @@
services = {
sddm.enable = true;
#openssh.enable = false;
openssh.enable = true;
pipewire.enable = true;
#kdePlasma6.enable = true;
netbird.enable = true;
@@ -93,8 +101,6 @@
};
};
system.stateVersion = "25.05";
fonts.packages = with pkgs; [ nerd-fonts.fira-code ];
};
}

View File

@@ -12,11 +12,6 @@
config = {
services.desktopManager.cosmic = {
enable = true;
xwayland.enable = true;
};
nixpkgs.config = {
allowUnfree = true;
};
@@ -27,12 +22,26 @@
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
timeout = null;
};
kernelParams = [ "snd-intel-dspcfg.dsp_driver=1" ];
};
systemd.extraConfig = "DefaultLimitNOFILE=2048";
specialisation = {
docked.configuration = {
home-manager.users.nathan.wayland.windowManager.hyprland.extraConfig = ''
monitor=eDP-1,1920x1080@300,0x0,1
'';
};
};
home-manager.users.nathan.wayland.windowManager.hyprland.extraConfig = lib.mkIf (config.specialisation != {}) ''
monitor=eDP-1,1920x1080@60,0x0,1
monitor=eDP-1, addreserved, 40,0,0,0
'';
hardware = {
graphics.enable = true;
@@ -43,7 +52,7 @@
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
powerManagement.finegrained = true;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
@@ -109,7 +118,6 @@
sddm.enable = true;
openssh.enable = false;
pipewire.enable = true;
kdePlasma6.enable = true;
netbird.enable = true;
ollama.enable = true;
};

View File

@@ -1,4 +1,4 @@
{ config, pkgs, inputs, modulesPath, ... }: {
{ pkgs, inputs, ... }: {
imports = with inputs; [
@@ -6,8 +6,6 @@
(import ./disko.nix { device = "/dev/mmcblk0"; })
(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
sops-nix.nixosModules.sops
home-manager.nixosModules.default
@@ -16,6 +14,18 @@
config = {
hardware.enableRedistributableFirmware = true;
hardware.enableAllHardware = true;
programs.zsh.enable = true;
environment.shells = with pkgs; [ zsh bashInteractive ];
networking = {
nameservers = [ "1.1.1.1" "1.0.0.1" ];
networkmanager.enable = true;
};
nixpkgs.hostPlatform = "x86_64-linux";
boot = {
@@ -25,15 +35,33 @@
};
};
users.users."nathan" = {
hashedPassword = "$y$j9T$F0pn6l4C45lz4a0FTZLqE0$Fc48Ptbmz/3MJCk/Jsaqop4ff.bY3J3GcjhmJx5R7k6";
packages = with pkgs; [
git
nerd-fonts.fira-code
];
};
sops = {
age.keyFile = "/var/lib/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
defaultSopsFormat = "yaml";
#secrets."nathan/pass".neededForUsers = true;
};
sysconfig = {
remoteBuildClient = true;
#remoteBuildClient = true;
host = "live";
graphical = true;
users = {
nathan = {
extraGroups = [ "wheel" "networkmanager" ];
hashedPasswordFile = config.sops.secrets."nathan/pass".path;
#hashedPasswordFile = config.sops.secrets."nathan/pass".path;
shell = pkgs.zsh;
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAsU69CxfQk58CvItPN426h5Alnpb60SH37wet97Vb57 nathan@laptop"
];
home-manager = {
enable = true;
standalone = false;
@@ -49,7 +77,7 @@
calcurse.enable = true;
rofi.enable = true;
firefox.enable = true;
git.enable = true;
#git.enable = true;
nh.enable = true;
};
}
@@ -60,7 +88,7 @@
services = {
sddm.enable = true;
#openssh.enable = false;
openssh.enable = true;
pipewire.enable = true;
#kdePlasma6.enable = true;
netbird.enable = true;

View File

@@ -0,0 +1,17 @@
nathan:
pass: ENC[AES256_GCM,data:0hmcbyTLbmadTAMoSeOgBmpqgtCKtfrY1EIxIUoxgo+3297+jZqcsSmhPlFKtbornezm+7uPRzaVRHyp2G0Ee6mG4FbzUfGYFg==,iv:F2aTS/BPPxTemu4vEy9H0FY0HUEBWaRFeaoMr8TJbmA=,tag:Ai90KJluCimR6OG5BtCnVQ==,type:str]
sops:
age:
- recipient: age1yqgyp2uxz4lzrc9f9ka0mfjl5fr6ahf8nf24nlmran2wulg6fpvq9hyp9q
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5cUF3YWY2STgwc1pzREJP
QndUajV6WUJFZEdtOGNOQ05Ua1hGM25IbzJJCjF3Z24rc0JwMSt5bnpIVDZ0ZGJG
ZE9LdEU3bXhsMUxEL0hlMTNTc0VkR0kKLS0tIHhWOGJocS94eWJUSXdtaldJSG50
TjZCN3RneGtJa0hLNU1yTUlLMDJpcEUKNvpcKkNXeRyFsn0CRjSKNb89l1864I6A
Yzijw0c0BVfivhn2wAyq0fYuw2rT+vIJdFUHvIgxkpkZFl4n/RucOQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-08-31T19:51:15Z"
mac: ENC[AES256_GCM,data:L4SK7iaPX3dPJTyl2RgSuqMcoFRm8q9k64TsroV3tT1uWn0J9XRBj9KXgGj/qLloQkgmZsmtct8w2x5tYYosh5k1+056/DeTD8l/Nw5339qKJppRjg6jYNtw02ZGPSNFQdmGNQU9NOOuT8Q94sl0mphwlYhFV1Tf1r/AoSg1ja8=,iv:/qEVdxOR8CDJ2plE8Ez9ML+u+lKPmsNfV0GyXgBbQRk=,tag:EyjdJzvuHXn+0+5hOk0dVg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2

View File

@@ -0,0 +1,75 @@
{ config, lib, inputs, ... }: {
options.sysconfig.virtualization.authentik.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
imports = [
inputs.sops-nix.nixosModules.sops
];
config = lib.mkIf config.sysconfig.virtualization.authentik.enable {
sops.secrets."authentik/dbpass" = {};
networking = {
nat.internalInterfaces = [ "ve-authentik" ];
};
containers.authentik = {
autoStart = true;
privateNetwork = true;
hostAddress = "192.168.100.10";
localAddress = "192.168.100.35";
extraFlags = [
"--load-credential=dbpass:${config.sops.secrets."authentik/dbpass".path}"
];
bindMounts = {
"/etc/authentik" = {
hostPath = "/ssd1/Authentik";
isReadOnly = false;
};
};
config = {
networking.firewall.allowedTCPPorts = [ 9001 ];
systemd.services.secrets_setup = {
wantedBy = [ "authentik.service" ];
serviceConfig = {
LoadCredential = [
"dbpass"
];
};
script = ''
cat ''${CREDENTIALS_DIRECTORY}/dbpass > /etc/authentik/dbpass
chown postgres:postgres /etc/authentik/dbpass
'';
};
services.authentik = {
enable = true;
environmentFile = "/etc/authentik/authentik.env";
settings = {
disable_startup_analytics = true;
avatars = "initials";
};
worker.listenHTTP = "0.0.0.0:9001";
};
system.stateVersion = "25.05";
};
};
};
}

View File

@@ -14,6 +14,7 @@
./netbird
./keycloak
./ollama
./openwebui
./n8n
./wyoming
./code-server

View File

@@ -8,7 +8,7 @@
config = lib.mkIf config.sysconfig.virtualization.gitea.enable {
networking = {
hosts."192.168.100.20" = [ "gitea.blunkall.us" ];
hosts."192.168.100.20" = [ "gitea.esotericbytes.com" ];
nat.internalInterfaces = [ "ve-gitea" ];
};
@@ -77,9 +77,9 @@
settings = {
server = {
DOMAIN = "gitea.blunkall.us";
DOMAIN = "gitea.esotericbytes.com";
HTTP_PORT = 3000;
ROOT_URL = "https://gitea.blunkall.us/";
ROOT_URL = "https://gitea.esotericbytes.com/";
};
service = {
DISABLE_REGISTRATION = false;

View File

@@ -62,7 +62,7 @@
database.passwordFile = "/etc/keycloak/dbpass";
settings = {
hostname = "auth.blunkall.us";
hostname = "auth.esotericbytes.com";
http-enabled = true;

View File

@@ -28,14 +28,21 @@
enable = true;
openFirewall = true;
environment = {
N8N_DIAGNOSTICS_ENABLED = "false";
N8N_VERSION_NOTIFICATIONS_ENABLED = "false";
N8N_TEMPLATES_ENABLED = "false";
settings = {
EXTERNAL_FRONTEND_HOOKS_URLS = "";
N8N_DIAGNOSTICS_CONFIG_FRONTEND = "";
N8N_DIAGNOSTICS_CONFIG_BACKEND = "";
N8N_SECURE_COOKIE = "false";
};
#webhookUrl = "https://n8n.blunkall.us/";
};
/*
systemd.services.n8n = {
environment = {
N8N_DIAGNOSTICS_ENABLED = "false";
@@ -49,7 +56,7 @@
N8N_SECURE_COOKIE = "false";
};
};
*/
system.stateVersion = "25.05";
};
};

View File

@@ -15,17 +15,20 @@
};
};
config = {
services.netbird = {
enable = config.sysconfig.services.netbird.enable;
ui.enable = true;
/*package = let
pkgs-us = import inputs.nixpkgs-us {
config = let
pkgs-com = import inputs.nixpkgs-us {
system = "x86_64-linux";
config.allowUnfree = true;
};
in pkgs-us.netbird;*/
in {
services.netbird = {
enable = config.sysconfig.services.netbird.enable;
ui = {
enable = true;
#package = pkgs-com.netbird-ui;
};
#package = pkgs-com.netbird;
};
networking = {
@@ -64,7 +67,7 @@
config = {
services.nginx.virtualHosts."vpn.blunkall.us" = {
services.nginx.virtualHosts."vpn.esotericbytes.com" = {
listen = [
{
addr = "0.0.0.0";
@@ -79,13 +82,13 @@
server = {
enable = true;
enableNginx = true;
domain = "vpn.blunkall.us";
domain = "vpn.esotericbytes.com";
dashboard = {
enable = true;
enableNginx = true;
settings = {
AUTH_AUTHORITY = "https://auth.blunkall.us/realms/General";
AUTH_AUTHORITY = "https://auth.esotericbytes.com/realms/General";
AUTH_CLIENT_ID = "netbird";
AUTH_SUPPORTED_SCOPES = "openid profile email offline_access api";
AUTH_AUDIENCE = "netbird";
@@ -93,12 +96,7 @@
NETBIRD_TOKEN_SOURCE = "accessToken";
};
package = let
pkgs-us = import inputs.nixpkgs-us {
system = "x86_64-linux";
config.allowUnfree = true;
};
in pkgs-us.netbird-dashboard;
package = pkgs-com.netbird-dashboard;
};
management = {
enable = true;
@@ -109,19 +107,19 @@
dnsDomain = "vpn";
turnDomain = "vpn.blunkall.us";
turnDomain = "vpn.esotericbytes.com";
turnPort = 3478;
logLevel = "DEBUG";
oidcConfigEndpoint = "https://auth.blunkall.us/realms/General/.well-known/openid-configuration";
oidcConfigEndpoint = "https://auth.esotericbytes.com/realms/General/.well-known/openid-configuration";
settings = {
"TURNConfig" = {
"Turns" = [
{
"Proto" = "udp";
"URI" = "turn:vpn.blunkall.us:3478";
"URI" = "turn:vpn.esotericbytes.com:3478";
"Username" = "netbird";
"Password"._secret = "/etc/netbird/coturnPass";
}
@@ -134,14 +132,14 @@
"HttpConfig" = {
"Address" = "0.0.0.0:443";
"AuthIssuer" = "https://auth.blunkall.us/realms/General";
"AuthIssuer" = "https://auth.esotericbytes.com/realms/General";
"AuthAudience" = "netbird";
"AuthKeysLocation" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/certs";
"AuthKeysLocation" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/certs";
"AuthUserIDClaim" = "";
"CertFile" = "";
"CertKey" = "";
"IdpSignKeyRefreshEnabled" = false;
"OIDCConfigEndpoint" = "https://auth.blunkall.us/realms/General/.well-known/openid-configuration";
"OIDCConfigEndpoint" = "https://auth.esotericbytes.com/realms/General/.well-known/openid-configuration";
};
"DeviceAuthorizationFlow" = {
@@ -152,8 +150,8 @@
"Domain" = "";
"ClientID" = "";
"ClientSecret" = "";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token";
"DeviceAuthEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/auth/device";
"TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"DeviceAuthEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/auth/device";
"Scope" = "openid";
"UseIDToken" = false;
"RedirectURLs" = null;
@@ -163,15 +161,15 @@
"IdpManagerConfig" = {
"ManagerType" = "keycloak";
"ClientConfig" = {
"Issuer" = "https://auth.blunkall.us/realms/General";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token";
"Issuer" = "https://auth.esotericbytes.com/realms/General";
"TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"ClientID" = "netbird-backend";
"ClientSecret" = "QuqjTOAHKE6N6jJqkB1F1RGo3kqUhEdg";
"GrantType" = "client_credentials";
};
"ExtraConfig" = {
"AdminEndpoint" = "https://auth.blunkall.us/admin/realms/General";
"AdminEndpoint" = "https://auth.esotericbytes.com/admin/realms/General";
};
"Auth0ClientCredentials" = null;
"AzureClientCredentials" = null;
@@ -185,8 +183,8 @@
"ClientID" = "netbird";
"ClientSecret" = "";
"Domain" = "";
"AuthorizationEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/auth";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token";
"AuthorizationEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/auth";
"TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"Scope" = "openid profile email offline_access api";
"RedirectURLs" = [
"http://localhost:53000"

View File

@@ -67,7 +67,7 @@
extraAppsEnable = true;
settings = {
overwriteprotocol = "https";
trusted_domains = [ "nextcloud.blunkall.us" ];
trusted_domains = [ "nextcloud.esotericbytes.com" ];
trusted_proxies = [ "192.168.100.11" ];
default_phone_region = "US";
};

View File

@@ -1,13 +1,13 @@
{ config, lib, ... }: {
options.sysconfig.virtualization."blunkall.us".enable = lib.mkOption {
options.sysconfig.virtualization."esotericbytes.com".enable = lib.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.sysconfig.virtualization."blunkall.us".enable {
config = lib.mkIf config.sysconfig.virtualization."esotericbytes.com".enable {
containers.blunkall-us = {
containers.esotericbytes-com = {
autoStart = true;
privateNetwork = true;
@@ -16,7 +16,7 @@
bindMounts = {
"/var/www/data" = {
hostPath = "/ssd1/blunkall_us/data";
hostPath = "/ssd1/esotericbytes-com/data";
isReadOnly = false;
};
};
@@ -26,12 +26,12 @@
services.nginx = {
enable = true;
virtualHosts = {
"blunkall.us" = {
"esotericbytes.com" = {
enableACME = false;
forceSSL = false;
root = "/var/www/data";
};
"homebox.vpn/blunkall" = {
"homebox.vpn/esotericbytes" = {
enableACME = false;
forceSSL = false;
root = "/var/www/data";

View File

@@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }: {
options = {
sysconfig.virtualization.openwebui.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
};
config = lib.mkIf config.sysconfig.virtualization.openwebui.enable {
containers.openwebui = {
autoStart = true;
privateNetwork = true;
hostAddress = "192.168.100.10";
localAddress = "192.168.100.33";
config = {
services.open-webui = {
enable = true;
package = pkgs.open-webui;
openFirewall = true;
host = "0.0.0.0";
};
system.stateVersion = "25.05";
};
};
};
}

View File

@@ -8,7 +8,7 @@
config = lib.mkIf config.sysconfig.virtualization.traefik.enable {
networking = {
hosts."192.168.100.11" = [ "blunkall.us" "*.blunkall.us" "traefik.local" ];
hosts."192.168.100.11" = [ "esotericbytes.com" "*.esotericbytes.com" "traefik.local" ];
firewall.allowedTCPPorts = [ 22 80 443];
nat.internalInterfaces = [ "ve-traefik" ];
@@ -74,8 +74,8 @@
http.tls = {
certResolver = "cloudflare";
domains = {
main = "blunkall.us";
sans = [ "*.blunkall.us" "blunkall.us" ];
main = "esotericbytes.com";
sans = [ "*.esotericbytes.com" ];
};
};
};
@@ -105,88 +105,88 @@
routers = {
homepageSecure = {
entryPoints = [ "websecure" ];
rule = "Host(`blunkall.us`) || Host(`www.blunkall.us`) || (Host(`homebox.vpn`) && PathPrefix(`/blunkall`))";
rule = "Host(`esotericbytes.com`) || Host(`www.esotericbytes.com`)";
service = "homepage";
tls.certResolver = "cloudflare";
};
/*remote = {
entryPoints = [ "websecure" ];
rule = "Host(`remote.blunkall.us`)";
rule = "Host(`remote.esotericbytes.com`)";
service = "novnc";
tls.certResolver = "cloudflare";
#middlewares = [ "authentik" ];
};*/
/*homeassistant = {
entryPoints = [ "websecure" ];
rule = "Host(`hass.blunkall.us`)";
rule = "Host(`hass.esotericbytes.com`)";
service = "homeassistant";
tls.certResolver = "cloudflare";
};*/
jellyfin = {
entryPoints = [ "websecure" ];
rule = "Host(`jellyfin.blunkall.us`)";
rule = "Host(`jellyfin.esotericbytes.com`)";
service = "jellyfin";
tls.certResolver = "cloudflare";
};
auth = {
entryPoints = [ "websecure" ];
rule = "Host(`auth.blunkall.us`)";
rule = "Host(`auth.esotericbytes.com`)";
service = "keycloak";
tls.certResolver = "cloudflare";
};
/*gitlab = {
entryPoints = [ "websecure" ];
rule = "Host(`gitlab.blunkall.us`)";
rule = "Host(`gitlab.esotericbytes.com`)";
service = "gitlab";
tls.certResolver = "cloudflare";
};*/
gitea = {
entryPoints = [ "websecure" ];
rule = "Host(`gitea.blunkall.us`)";
rule = "Host(`gitea.esotericbytes.com`)";
service = "gitea";
tls.certResolver = "cloudflare";
};
nextcloud = {
entryPoints = [ "websecure" ];
rule = "Host(`nextcloud.blunkall.us`)";
rule = "Host(`nextcloud.esotericbytes.com`)";
service = "nextcloud";
tls.certResolver = "cloudflare";
middlewares = [
"nextcloud_redirectregex"
];
};
traefik = {
/*traefik = {
entryPoints = [ "websecure" ];
rule = "Host(`192.168.100.11`) || Host(`homebox.vpn`)";
service = "api@internal";
tls.certResolver = "cloudflare";
#middlewares = [ "authentik" ];
};
};*/
/*ntfy = {
entryPoints = [ "websecure" ];
rule = "Host(`ntfy.blunkall.us`)";
rule = "Host(`ntfy.esotericbytes.com`)";
service = "ntfy";
tls.certResolver = "cloudflare";
};*/
/*pihole = {
entryPoints = [ "localsecure" ];
rule = "Host(`pihole.blunkall.us`)";
rule = "Host(`pihole.esotericbytes.com`)";
service = "pihole";
tls.certResolver = "cloudflare";
};*/
netbird = {
entryPoints = [ "websecure" ];
rule = "Host(`vpn.blunkall.us`)";
rule = "Host(`vpn.esotericbytes.com`)";
service = "netbird";
tls.certResolver = "cloudflare";
};
/*n8n = {
entryPoints = [ "websecure" ];
rule = "Host(`n8n.blunkall.us`)";
rule = "Host(`n8n.esotericbytes.com`)";
service = "n8n";
tls.certResolver = "cloudflare";
};*/
@@ -197,8 +197,8 @@
nextcloud_redirectregex.redirectregex = {
permanent = true;
regex = "https://nextcloud.blunkall.us/.well-known/(?:card|cal)dav";
replacement = "https://nextcloud.blunkall.us/remote.php/dav";
regex = "https://nextcloud.esotericbytes.com/.well-known/(?:card|cal)dav";
replacement = "https://nextcloud.esotericbytes.com/remote.php/dav";
};
};

View File

@@ -98,11 +98,7 @@
openwakeword = lib.mkIf config.sysconfig.virtualization.wyoming.openwakeword {
enable = true;
uri = "tcp://0.0.0.0:11432";
preloadModels = [
"alexa"
"hey_jarvis"
"ok_nabu"
];
threshold = 0.5;
customModelsDirectories = [
#./wake_words

View File

@@ -1,4 +1,4 @@
{ config, lib, pkgs, inputs, ... }: {
{ config, lib, pkgs, ... }: {
options.sysconfig.services.sddm.enable = lib.mkOption {
type = lib.types.bool;
@@ -9,7 +9,7 @@
qt.enable = true;
environment.systemPackages = with pkgs; [ (sddm-astronaut.override { embeddedTheme = "cyberpunk"; }) ];
environment.systemPackages = with pkgs; [ (sddm-astronaut.override { embeddedTheme = "pixel_sakura"; }) ];
services.displayManager.sddm = {
enable = true;

View File

@@ -0,0 +1,17 @@
{ config, lib, ... }: {
options = {
sysconfig.wireguard.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
};
config = lib.mkIf config.sysconfig.wireguard.enable {
networking.wireguard = {
enable = true;
interfaces.wg0 = {
};
};
};
}

View File

@@ -94,7 +94,7 @@
homeconfig = {
host = config.sysconfig.host;
name = x;
graphical = config.sysconfig.graphical;
graphical = lib.mkDefault config.sysconfig.graphical;
};
}
] ++ (if inputs ? ${x} then [ (inputs.${x} /*{ config = config.home-manager.users.${x}; inherit lib pkgs inputs; }*/) ] else [])