122 Commits

Author SHA1 Message Date
317571499e update atuin, lazygit
there are overlays and are out of date
2026-04-09 10:29:20 -04:00
971a263963 Merge branch 'master' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 2026-04-09 09:44:52 -04:00
2fb3e2867c added overlay packages, added go overlay
needed go overlay for diffnav
2026-04-09 09:44:50 -04:00
4492dcdff5 added easyeffects 2026-04-08 19:53:03 -04:00
7d8dcee57c Merge pull request 'Thancred (Game server)' (#8) from thancred into master
Reviewed-on: #8
2026-04-04 22:25:32 -05:00
3bd43f72a2 Merge branch 'master' into thancred 2026-04-02 13:00:37 -05:00
915ecc73e8 fixed new aliases 2026-03-25 11:33:20 -04:00
43c5308feb added more git aliases 2026-03-25 02:11:06 -04:00
a1c0407f02 update flake lock 2026-03-24 20:13:51 -04:00
33f590b214 added systemd service for vintagestory-server 2026-03-23 21:46:54 -04:00
89cdef92a7 Merge remote-tracking branch 'origin' into thancred 2026-03-23 21:25:36 -04:00
2f378ddc22 added some shell quotes 2026-03-23 21:15:36 -04:00
937deb7079 added some git aliases 2026-03-23 20:39:02 -04:00
4c462c21f3 Merge branch 'master' of ssh://scm.wyattjmiller.com:222/wymiller/nix-config-v2 2026-03-23 20:21:55 -04:00
eb26a93944 modified linux home packages
why did i ever get rid of this in the first place?
2026-03-23 20:21:52 -04:00
098478fa0f added login quotes 2026-03-18 11:42:59 -04:00
80fd89c5ac added groups 2026-02-25 21:52:36 -05:00
1a8c910e3a group, extraGroups fix 2026-02-25 21:44:12 -05:00
3992cab7c8 added user to thancred 2026-02-25 21:39:35 -05:00
f0eb5678c8 modifications 2026-02-25 20:09:06 -05:00
bd262d3fb6 wtf is that doing here?? 2026-02-25 20:00:40 -05:00
f1a426bd2e Merge branch 'master' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 2026-02-24 01:00:44 -05:00
9fe67f2b97 updated machine module readme 2026-02-24 01:00:06 -05:00
245b5b1e08 Merge pull request 'Y'shtola (Matrix server)' (#7) from yshtola-build into master
Reviewed-on: #7
2026-02-23 23:45:39 -06:00
b3954838d2 modularized yshtola
pulled out the FQDNs and repeating strings that i don't need repeated
2026-02-24 00:42:55 -05:00
6b586d80ab final touches to matrix, livekit, lk-jwt-service 2026-02-24 00:08:30 -05:00
0718c9f18d Merge branch 'yshtola-build' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 into yshtola-build 2026-02-23 22:31:15 -05:00
14dbc1363e things happened 2026-02-23 22:30:45 -05:00
7e0d58c097 wip: modified livekit-key service 2026-02-23 21:29:11 -06:00
f2ae159c67 wip: added configuration changes to tuwunel, livekit, lk-jwt-service 2026-02-23 21:53:20 -05:00
a3ef9fa59e changes to hardware config 2026-02-19 02:44:23 +00:00
aea71bb49b wip: ready for hardware configuration 2026-02-18 19:55:43 -05:00
e7b2a1bc1e wip: still in progress 2026-02-18 14:57:21 -05:00
bdf4d54e99 wip: build still in progress 2026-02-18 08:40:47 -05:00
26662e1419 wip: yshtola build in progress 2026-02-17 18:24:34 -05:00
f2ee981953 modifying thancred to match updated flake config 2026-02-16 20:39:20 -05:00
eb666f6a01 Merge remote-tracking branch 'origin' into thancred 2026-02-16 20:34:09 -05:00
b8db103e08 Merge pull request 'Standalone Home Manager configuration' (#6) from hm-standalone-config into master
Reviewed-on: #6
2026-02-16 19:24:07 -06:00
08adc255d6 darwin changes 2026-02-16 19:59:35 -05:00
c81ca5ee4c works on cloud 2026-02-16 19:33:25 -05:00
9cfe456cb9 Merge remote-tracking branch 'origin' into hm-standalone-config 2026-02-16 19:19:04 -05:00
ad7f01e41e commit 2026-02-15 19:10:58 -05:00
c452ebff3c real commit this time 2026-02-15 19:05:42 -05:00
a1e71488d8 Revert "modified gaming apps"
This reverts commit 67fda15ca9.
2026-02-15 18:52:30 -05:00
45c8f7ec27 Revert "added hardware config"
This reverts commit 769ab6f72d.
2026-02-15 18:51:41 -05:00
67fda15ca9 modified gaming apps 2026-02-15 18:31:15 -05:00
769ab6f72d added hardware config 2026-02-15 22:49:56 +00:00
1769e583d8 created vs vm 2026-02-14 19:21:25 -05:00
2592a1cd72 update flake 2026-02-14 18:30:51 -05:00
6dbfc5805e updated flake to 25.11 2026-02-01 21:32:32 -05:00
1f9ff31234 added vintage story flake 2026-01-28 08:25:51 -05:00
be6cab1ab2 added sched_ext scx_bpfland scheduler 2026-01-24 22:33:48 -05:00
7f0fdbc6bb more hardware virtualization stuff being added in 2026-01-05 15:46:13 -05:00
e3b134e48a added swaytreesave flake, fixed manual import, fixed infinite recursion 2025-12-30 21:48:46 -05:00
0fa26e2840 flake update 2025-12-28 22:17:23 -05:00
7a3c83f088 add shell init path 2025-12-19 15:37:16 -05:00
adcd58dce9 Merge pull request 'Nixpkgs 25.11' (#5) from 25.11-move into master
Reviewed-on: #5
2025-12-18 16:36:17 -06:00
45ca395962 modified modules for nixos to build correctly 2025-12-16 17:59:40 -05:00
923cebd9c9 modified inputs to move over to 25.11 release 2025-12-16 15:35:47 -05:00
98ce7410c2 update flake 2025-12-14 18:15:48 -05:00
b7f65a6eeb modified hardware virt 2025-12-14 17:53:10 -05:00
70691c16e5 enabled nix-ld, related libraries 2025-12-13 17:22:38 -05:00
1cbfb37409 darwin build success
ready for pr ig
2025-12-13 17:04:28 -05:00
83d1494d4a nixos build success
darwin next maybe?
2025-12-13 14:04:54 -05:00
f8da56fe52 working build
fixed up krew home module
2025-12-12 15:52:04 -05:00
bcf5b224cb trying this 2025-12-12 15:39:23 -05:00
b762b06f05 cleanup? 2025-12-12 14:15:19 -05:00
9fedd2d61e removed k9s overlay
this commit got builds working, working in the sense that the build
actually threw an error! have to fix that
2025-12-10 17:09:19 -05:00
c81b48a0ee readme updates 2025-12-08 21:52:52 -05:00
75f08c16bc added adwaita fonts 2025-12-08 21:52:46 -05:00
4207b320c9 working? plus cleanup and fallbacks 2025-11-17 12:12:17 -05:00
14a0160309 added mangohud, vkbasalt as options to enable to apps/gaming module 2025-11-10 08:09:33 -05:00
43654c2946 added helvum to packages installed 2025-11-10 08:08:31 -05:00
8dd4513997 added zathura package 2025-11-08 17:26:05 -05:00
1d95ffb81a tweaked aagl a bit 2025-11-08 17:25:58 -05:00
c53db46ca7 Merge pull request 'AAGL' (#4) from anime-game-launcher into master
Reviewed-on: #4
2025-11-08 15:12:54 -06:00
c546e6242b Merge branch 'master' into anime-game-launcher 2025-11-08 15:12:38 -06:00
05bb811e42 added every launcher that aagl has to offer
added a todo comment that mentions the in-development unified launcher
2025-11-08 16:17:38 -05:00
7615d1a1d5 added browser extension 2025-11-06 22:17:54 -05:00
6561e37119 wip: still broken 2025-11-06 17:14:39 -05:00
9eea820f3b updated browser extensions 2025-11-03 20:59:55 -05:00
6024b77535 added aagl flake, implemeneted into gaming apps module 2025-11-02 10:25:27 -05:00
257fab9832 flake update 2025-11-01 18:46:26 -04:00
717e8c452d wip: broken, still working on it' 2025-10-31 17:07:59 -04:00
8fd3ca8c9a wip: modularizing? 2025-10-30 17:34:55 -04:00
a73194fed9 Merge pull request 'Overlay a couple of packages' (#3) from nix-override-overlay into master
Reviewed-on: #3
2025-10-23 21:44:32 -05:00
0572cacd28 added ldflags to lazygit override 2025-10-23 10:36:27 -04:00
ecf728bc11 working rust package override
plus flake update :P
2025-10-22 19:45:10 -04:00
5a59f98ebc working overlay to get latest version of lazygit 2025-10-22 08:19:52 -04:00
e1d13065f8 added shell greetings 2025-10-21 13:04:18 -04:00
5ab19d093a testing 2025-10-21 08:33:25 -04:00
569141d227 flake update 2025-10-18 20:31:32 -04:00
48edbfdc4b shairport service working
systemd service works now ig
2025-10-18 20:31:22 -04:00
50c62a4d3f shairport working
heard some static noise when listening, maybe something can fix that?
2025-10-18 18:13:50 -04:00
f4b518f806 little sway update 2025-10-15 08:40:54 -04:00
7fffa45e4e updated mountpoints: cloud 2025-10-14 01:29:14 -04:00
a3c53820b1 added sleep inhibiting aliases to fish 2025-10-02 18:44:58 -04:00
8cbdeb4cdc Merge pull request 'Superuser bypass' (#2) from macos-superuser-bypass-refactor into master
Reviewed-on: #2
2025-10-02 08:59:47 -05:00
bfa957adcd flake update 2025-10-02 09:58:03 -04:00
50d22afef8 Merge branch 'master' into macos-superuser-bypass-refactor 2025-10-02 08:25:09 -04:00
29feb9223e fixed git config
i think i am reverting a false fix, idk
2025-09-21 11:55:46 -04:00
7bc7749f51 fixed focusrite module 2025-09-21 11:55:14 -04:00
93052529b8 modified things 2025-09-13 16:30:26 -04:00
51beed138e added dedicated focusrite scarlett, appimage modules, modified cloud
these new modules include only packages, no other configuration. maybe
later but none currently
2025-09-13 16:09:21 -04:00
faed026258 some formatting modifications 2025-09-04 14:05:36 -04:00
3af5061a79 system update 2025-08-27 11:31:11 -04:00
ddd3fb39e4 bulk of the refactor 2025-08-27 11:31:06 -04:00
6ff4e13b03 flake update 2025-08-12 09:14:50 -04:00
13fc210f8b update valefor readme 2025-07-15 21:41:56 -05:00
66eddc0345 added catppuccin theme for bat
also the default
2025-07-09 20:08:48 -04:00
27c114b801 little sway update 2025-07-09 20:08:16 -04:00
936b4bbf44 added mako settings to sway 2025-07-08 23:40:02 -04:00
f06b17a336 added wl-clipboard, wl-clip-persist, gpu-screen-recorder 2025-07-08 23:30:05 -04:00
cb2edf6afb fixed zellij for the final time 2025-06-28 18:11:49 -04:00
109684d09c fixed zellij again?
don't trust ai to convert kdl to nix for you
2025-06-28 17:59:39 -04:00
4113b3ea57 added yazi
might add file later to add overrides and settings if needed
2025-06-28 15:51:24 -04:00
760d686499 finally fixed xdg portals 2025-06-28 15:50:51 -04:00
69e6329dea flake update 2025-06-28 15:50:34 -04:00
fccb1ab4ae fix zellij 2025-06-28 15:50:20 -04:00
57cd69a153 added zellij, settings 2025-06-28 14:29:00 -04:00
2c6765bb5b added godot, aseprite 2025-06-27 00:05:28 -04:00
30a72d9e74 added common environment file, fixed sudo issue 2025-06-27 00:05:10 -04:00
53 changed files with 2073 additions and 435 deletions

View File

View File

@@ -10,13 +10,12 @@ set $right l
set $term alacritty set $term alacritty
# Menu (rofi) # Menu (rofi)
set $rofi_cmd rofi -terminal '$term' set $menu wofi --term '$term'
set $menu $rofi_cmd -show combi -combi-modes drun#run -modes combi
### Output configuration ### Output configuration
output DP-3 pos 3840 0 res 1920x1080@59Hz output DP-3 pos 1920 0 res 1920x1080@60Hz
output HDMI-A-1 pos 0 0 res 1920x1080@59Hz output HDMI-A-1 pos 0 0 res 1920x1080@60Hz
output DP-2 pos 1920 0 res 1920x1080@60Hz output DP-2 pos 3840 0 res 1920x1080@60Hz
### Wallpaper ### Wallpaper
output HDMI-A-1 bg ~/.wallpaper/.wallpaper.png fill output HDMI-A-1 bg ~/.wallpaper/.wallpaper.png fill
@@ -26,18 +25,22 @@ output DP-3 bg ~/.wallpaper/.wallpaper.png fill
### Workspace binding ### Workspace binding
## DP-3 bindings ## DP-3 bindings
workspace 1 output DP-2 workspace 1 output DP-3
workspace 2 output DP-2 workspace 2 output DP-3
workspace 4 output DP-3
workspace 5 output DP-3
## HDMI-A-1 bindings ## HDMI-A-1 bindings
workspace 3 output HDMI-A-1 workspace 3 output HDMI-A-1
workspace 9 output HDMI-A-1
## DP-2 bindings ## DP-2 bindings
workspace 6 output DP-3 workspace 6 output DP-2
workspace 7 output DP-3 workspace 7 output DP-2
workspace 8 output DP-2
### Colour options ### Colour options
set $bg #24283b set $bg #24283b
set $bg-inactive #323232 set $bg-inactive #323232
set $bg-urgent #000000 set $bg-urgent #000000
set $text #eeeeec set $text #eeeeec
@@ -87,8 +90,9 @@ floating_modifier $mod normal
# Reload the configuration file # Reload the configuration file
bindsym $mod+Shift+c reload bindsym $mod+Shift+c reload
# Exit sway (logs you out of your Wayland session) # Shutdown and reboot hotkeys
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the shutdown shortcut. Do you really want to shutdown your computer?' -b 'Yes, shutdown' 'systemctl poweroff'
bindsym $mod+Shift+r exec swaynag -t warning -m 'You pressed the reboot shortcut. Do you really want to reboot your computer?' -b 'Yes, reboot' 'systemctl reboot'
### Navigation ### Navigation
# Move your focus around # Move your focus around
@@ -182,8 +186,9 @@ mode "resize" {
bindsym Return mode "default" bindsym Return mode "default"
bindsym Escape mode "default" bindsym Escape mode "default"
} }
bindsym $mod+r mode "resize"
### resize
bindsym $mod+r mode "resize"
### Audio and brightness keybinds ### Audio and brightness keybinds
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
@@ -196,16 +201,14 @@ bindsym XF86AudioPrev exec playerctl previous
bindsym XF86MonBrightnessUp exec light -A 5 bindsym XF86MonBrightnessUp exec light -A 5
bindsym XF86MonBrightnessDown exec light -U 5 bindsym XF86MonBrightnessDown exec light -U 5
### Lock the screen so my brother ### Lock the screen
### won't dick with my computer bindsym $mod+Ctrl+q 'swaylock -f -i /home/wyatt/.wallpaper/.wallpaper_lock.png'
bindsym $mod+Ctrl+l 'swaylock -f -i /home/wyatt/.wallpaper_lock.jpeg'
### Status Bar: ### Status Bar:
bar { bar {
swaybar_command waybar swaybar_command waybar
} }
### Font settings: ### Font settings:
font pango:FiraCode: 14px font pango:FiraCode: 14px

254
defaults/zellij/config.kdl Normal file
View File

@@ -0,0 +1,254 @@
keybinds clear-defaults=true {
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "left" { MoveFocus "left"; }
bind "down" { MoveFocus "down"; }
bind "up" { MoveFocus "up"; }
bind "right" { MoveFocus "right"; }
bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
bind "d" { NewPane "down"; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; }
bind "j" { MoveFocus "down"; }
bind "k" { MoveFocus "up"; }
bind "l" { MoveFocus "right"; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "p" { SwitchFocus; }
bind "Ctrl p" { SwitchToMode "normal"; }
bind "r" { NewPane "right"; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
}
tab {
bind "left" { GoToPreviousTab; }
bind "down" { GoToNextTab; }
bind "up" { GoToPreviousTab; }
bind "right" { GoToNextTab; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "[" { BreakPaneLeft; SwitchToMode "normal"; }
bind "]" { BreakPaneRight; SwitchToMode "normal"; }
bind "b" { BreakPane; SwitchToMode "normal"; }
bind "h" { GoToPreviousTab; }
bind "j" { GoToNextTab; }
bind "k" { GoToPreviousTab; }
bind "l" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "tab" { ToggleTab; }
}
resize {
bind "left" { Resize "Increase left"; }
bind "down" { Resize "Increase down"; }
bind "up" { Resize "Increase up"; }
bind "right" { Resize "Increase right"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "=" { Resize "Increase"; }
bind "H" { Resize "Decrease left"; }
bind "J" { Resize "Decrease down"; }
bind "K" { Resize "Decrease up"; }
bind "L" { Resize "Decrease right"; }
bind "h" { Resize "Increase left"; }
bind "j" { Resize "Increase down"; }
bind "k" { Resize "Increase up"; }
bind "l" { Resize "Increase right"; }
bind "Ctrl n" { SwitchToMode "normal"; }
}
move {
bind "left" { MovePane "left"; }
bind "down" { MovePane "down"; }
bind "up" { MovePane "up"; }
bind "right" { MovePane "right"; }
bind "h" { MovePane "left"; }
bind "Ctrl h" { SwitchToMode "normal"; }
bind "j" { MovePane "down"; }
bind "k" { MovePane "up"; }
bind "l" { MovePane "right"; }
bind "n" { MovePane; }
bind "p" { MovePaneBackwards; }
bind "tab" { MovePane; }
}
scroll {
bind "Alt left" { MoveFocusOrTab "left"; SwitchToMode "normal"; }
bind "Alt down" { MoveFocus "down"; SwitchToMode "normal"; }
bind "Alt up" { MoveFocus "up"; SwitchToMode "normal"; }
bind "Alt right" { MoveFocusOrTab "right"; SwitchToMode "normal"; }
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "Alt h" { MoveFocusOrTab "left"; SwitchToMode "normal"; }
bind "Alt j" { MoveFocus "down"; SwitchToMode "normal"; }
bind "Alt k" { MoveFocus "up"; SwitchToMode "normal"; }
bind "Alt l" { MoveFocusOrTab "right"; SwitchToMode "normal"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
search {
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "n" { Search "down"; }
bind "o" { SearchToggleOption "WholeWord"; }
bind "p" { Search "up"; }
bind "w" { SearchToggleOption "Wrap"; }
}
session {
bind "c" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "Ctrl o" { SwitchToMode "normal"; }
bind "p" {
LaunchOrFocusPlugin "plugin-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
}
shared_except "locked" {
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt [" { PreviousSwapLayout; }
bind "Alt ]" { NextSwapLayout; }
bind "Alt f" { ToggleFloatingPanes; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Alt i" { MoveTab "left"; }
bind "Alt n" { NewPane; }
bind "Alt o" { MoveTab "right"; }
bind "Ctrl q" { Quit; }
}
shared_except "locked" "move" {
bind "Ctrl h" { SwitchToMode "move"; }
}
shared_except "locked" "session" {
bind "Ctrl o" { SwitchToMode "session"; }
}
shared_except "locked" "scroll" {
bind "Alt left" { MoveFocusOrTab "left"; }
bind "Alt down" { MoveFocus "down"; }
bind "Alt up" { MoveFocus "up"; }
bind "Alt right" { MoveFocusOrTab "right"; }
bind "Alt h" { MoveFocusOrTab "left"; }
bind "Alt j" { MoveFocus "down"; }
bind "Alt k" { MoveFocus "up"; }
bind "Alt l" { MoveFocusOrTab "right"; }
}
shared_except "locked" "scroll" "search" "tmux" {
bind "Ctrl b" { SwitchToMode "tmux"; }
}
shared_except "locked" "tab" {
bind "Ctrl t" { SwitchToMode "tab"; }
}
shared_except "locked" "pane" {
bind "Ctrl p" { SwitchToMode "pane"; }
}
shared_except "locked" "resize" {
bind "Ctrl n" { SwitchToMode "resize"; }
}
shared_except "normal" "locked" "entersearch" {
bind "enter" { SwitchToMode "normal"; }
}
shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
bind "esc" { SwitchToMode "normal"; }
}
shared_among "pane" "tmux" {
bind "x" { CloseFocus; SwitchToMode "normal"; }
}
shared_among "scroll" "search" {
bind "PageDown" { PageScrollDown; }
bind "PageUp" { PageScrollUp; }
bind "left" { PageScrollUp; }
bind "down" { ScrollDown; }
bind "up" { ScrollUp; }
bind "right" { PageScrollDown; }
bind "Ctrl b" { PageScrollUp; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "d" { HalfPageScrollDown; }
bind "Ctrl f" { PageScrollDown; }
bind "h" { PageScrollUp; }
bind "j" { ScrollDown; }
bind "k" { ScrollUp; }
bind "l" { PageScrollDown; }
bind "u" { HalfPageScrollUp; }
}
entersearch {
bind "Ctrl c" { SwitchToMode "scroll"; }
bind "esc" { SwitchToMode "scroll"; }
bind "enter" { SwitchToMode "search"; }
}
renametab {
bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
}
shared_among "renametab" "renamepane" {
bind "Ctrl c" { SwitchToMode "normal"; }
}
renamepane {
bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
}
shared_among "session" "tmux" {
bind "d" { Detach; }
}
tmux {
bind "left" { MoveFocus "left"; SwitchToMode "normal"; }
bind "down" { MoveFocus "down"; SwitchToMode "normal"; }
bind "up" { MoveFocus "up"; SwitchToMode "normal"; }
bind "right" { MoveFocus "right"; SwitchToMode "normal"; }
bind "space" { NextSwapLayout; }
bind "\"" { NewPane "down"; SwitchToMode "normal"; }
bind "%" { NewPane "right"; SwitchToMode "normal"; }
bind "," { SwitchToMode "renametab"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; SwitchToMode "normal"; }
bind "j" { MoveFocus "down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "up"; SwitchToMode "normal"; }
bind "l" { MoveFocus "right"; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "o" { FocusNextPane; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
}
}
plugins {
compact-bar location="zellij:compact-bar"
configuration location="zellij:configuration"
filepicker location="zellij:strider" {
cwd "/"
}
plugin-manager location="zellij:plugin-manager"
session-manager location="zellij:session-manager"
status-bar location="zellij:status-bar"
strider location="zellij:strider"
tab-bar location="zellij:tab-bar"
}
load_plugins {
}
theme "catppuccin-mocha"
show_startup_tips false
show_release_notes false
default_mode "normal"

433
flake.lock generated
View File

@@ -1,5 +1,27 @@
{ {
"nodes": { "nodes": {
"aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1774186997,
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
"type": "github"
},
"original": {
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"type": "github"
}
},
"darwin": { "darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -7,16 +29,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1748044287, "lastModified": 1772129556,
"narHash": "sha256-9bJzyUX5+HXYmI60WMGYXXDdhGbSh1Le6yBM4og3K7E=", "narHash": "sha256-Utk0zd8STPsUJPyjabhzPc5BpPodLTXrwkpXBHYnpeg=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "2456ff5c95edfc3b197cb012b947012faed77591", "rev": "ebec37af18215214173c98cf6356d0aca24a2585",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "lnl7", "owner": "lnl7",
"ref": "nix-darwin-25.05", "ref": "nix-darwin-25.11",
"repo": "nix-darwin", "repo": "nix-darwin",
"type": "github" "type": "github"
} }
@@ -24,11 +46,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733328505, "lastModified": 1767039857,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -37,16 +59,60 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-schemas": {
"locked": {
"lastModified": 1761577921,
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
"revCount": 107,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-schemas_2": {
"locked": {
"lastModified": 1761577921,
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
"revCount": 107,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1701680307,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -55,26 +121,68 @@
"type": "github" "type": "github"
} }
}, },
"ghostty": { "git-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils", "gitignore": "gitignore",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs": [
"nixpkgs-unstable": "nixpkgs-unstable", "go-overlay",
"zig": "zig", "nixpkgs"
"zon2nix": "zon2nix" ]
}, },
"locked": { "locked": {
"lastModified": 1748207486, "lastModified": 1765016596,
"narHash": "sha256-4kR7VyauWpNMrBePHMM8yzQvUzHHGRVkQpJ3DyoKcH0=", "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=",
"owner": "ghostty-org", "owner": "cachix",
"repo": "ghostty", "repo": "git-hooks.nix",
"rev": "3f6c02b49e08aed51e4be85d87b79b9dbea34a85", "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "ghostty-org", "owner": "cachix",
"repo": "ghostty", "repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"go-overlay",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"go-overlay": {
"inputs": {
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1775676807,
"narHash": "sha256-l7B5l6cGBZoW4bs+4Zq/FMgxaZWWJqdUDkCVuH98hMY=",
"owner": "purpleclay",
"repo": "go-overlay",
"rev": "c5bd812957211f42c207da6b1415f49de30e183f",
"type": "github"
},
"original": {
"owner": "purpleclay",
"repo": "go-overlay",
"type": "github" "type": "github"
} }
}, },
@@ -85,16 +193,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1747556831, "lastModified": 1774274588,
"narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", "narHash": "sha256-dnHvv5EMUgTzGZmA+3diYjQU2O6BEpGLEOgJ1Qe9LaY=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", "rev": "cf9686ba26f5ef788226843bc31fda4cf72e373b",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-25.05", "ref": "release-25.11",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@@ -115,68 +223,17 @@
"type": "github" "type": "github"
} }
}, },
"nix-reshade": {
"inputs": {
"nixpkgs": "nixpkgs",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1749858810,
"narHash": "sha256-xg/MnKlnI6G/mLrh2apPuXUq8wjYSBbt8RtilM5cutI=",
"owner": "LovingMelody",
"repo": "nix-reshade",
"rev": "e1a7e702b052e4a98a9f15796f048270b2aca679",
"type": "github"
},
"original": {
"owner": "LovingMelody",
"repo": "nix-reshade",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1749285348, "lastModified": 1744536153,
"narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1741992157,
"narHash": "sha256-nlIfTsTrMSksEJc1f7YexXiPVuzD1gOfeN1ggwZyUoc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "da4b122f63095ca1199bd4d526f9e26426697689",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "release-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1741865919,
"narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
@@ -184,28 +241,146 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1747953325, "lastModified": 1765779637,
"narHash": "sha256-y2ZtlIlNTuVJUZCqzZAhIw5rrKP4DOSklev6c8PyCkQ=", "narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "55d1f923c480dadce40f5231feb472e81b0bab48", "rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-25.05", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": {
"locked": {
"lastModified": 1774244481,
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1766201043,
"narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=",
"rev": "b3aad468604d3e488d627c0b43984eb60e75e782",
"revCount": 904049,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.904049%2Brev-b3aad468604d3e488d627c0b43984eb60e75e782/019b3f6c-8b33-7edb-b858-9979590f270b/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1769089682,
"narHash": "sha256-9yA/LIuAVQq0lXelrZPjLuLVuZdm03p8tfmHhnDIkms=",
"rev": "078d69f03934859a181e81ba987c2bb033eebfc5",
"revCount": 906333,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.906333%2Brev-078d69f03934859a181e81ba987c2bb033eebfc5/019bebf2-031c-7119-8fdc-ce9d29d005fa/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
}
},
"root": { "root": {
"inputs": { "inputs": {
"aagl": "aagl",
"darwin": "darwin", "darwin": "darwin",
"ghostty": "ghostty", "go-overlay": "go-overlay",
"home-manager": "home-manager", "home-manager": "home-manager",
"nix-flatpak": "nix-flatpak", "nix-flatpak": "nix-flatpak",
"nix-reshade": "nix-reshade", "nixpkgs": "nixpkgs_3",
"nixpkgs": "nixpkgs_2" "rust-overlay": "rust-overlay_2",
"swaytreesave": "swaytreesave",
"vintage-story": "vintage-story"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1774321696,
"narHash": "sha256-g18xMjMNla/nsF5XyQCNyWmtb2UlZpkY0XE8KinIXAA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "49a67e6894d4cb782842ee6faa466aa90c92812d",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"swaytreesave": {
"inputs": {
"flake-schemas": "flake-schemas",
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1767148467,
"narHash": "sha256-W0O7SWq8ucokt4ctEAEvRvNoSM/oF7fBfb2kTN+lwTs=",
"ref": "refs/heads/master",
"rev": "0f4bb9bb450b28aa4f29d5eb2062deac6c26687a",
"revCount": 4,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
},
"original": {
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
} }
}, },
"systems": { "systems": {
@@ -223,79 +398,23 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix": { "vintage-story": {
"inputs": { "inputs": {
"nixpkgs": [ "flake-schemas": "flake-schemas_2",
"nix-reshade", "nixpkgs": "nixpkgs_6"
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1749194973, "lastModified": 1769397199,
"narHash": "sha256-eEy8cuS0mZ2j/r/FE0/LYBSBcIs/MKOIVakwHVuqTfk=", "narHash": "sha256-MSajncUGZtlpl88rqFdj42eGGyWnk2jw84VbK3AgUBA=",
"owner": "numtide", "ref": "refs/heads/master",
"repo": "treefmt-nix", "rev": "4d2313c50933645040a0d12556016fc2916bfa65",
"rev": "a05be418a1af1198ca0f63facb13c985db4cb3c5", "revCount": 1,
"type": "github" "type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
}, },
"original": { "original": {
"owner": "numtide", "type": "git",
"repo": "treefmt-nix", "url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
"type": "github"
}
},
"zig": {
"inputs": {
"flake-compat": [
"ghostty"
],
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs-stable"
]
},
"locked": {
"lastModified": 1741825901,
"narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "0b14285e283f5a747f372fb2931835dd937c4383",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
},
"zon2nix": {
"inputs": {
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1742104771,
"narHash": "sha256-LhidlyEA9MP8jGe1rEnyjGFCzLLgCdDpYeWggibayr0=",
"owner": "jcollie",
"repo": "zon2nix",
"rev": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"type": "github"
},
"original": {
"owner": "jcollie",
"ref": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"repo": "zon2nix",
"type": "github"
} }
} }
}, },

136
flake.nix
View File

@@ -1,18 +1,26 @@
{ {
description = "Wyatt's nix configuration suite"; description = "Wyatt's nix configuration suite";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0"; nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-25.05"; url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
darwin = { darwin = {
url = "github:lnl7/nix-darwin/nix-darwin-25.05"; url = "github:lnl7/nix-darwin/nix-darwin-25.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
ghostty.url = "github:ghostty-org/ghostty"; rust-overlay.url = "github:oxalica/rust-overlay";
nix-reshade.url = "github:LovingMelody/nix-reshade"; go-overlay.url = "github:purpleclay/go-overlay";
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# My personal flakes
swaytreesave.url = "git+https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git";
vintage-story.url = "git+https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git";
}; };
outputs = inputs @ { outputs = inputs @ {
@@ -21,26 +29,44 @@
nix-flatpak, nix-flatpak,
darwin, darwin,
home-manager, home-manager,
ghostty, rust-overlay,
go-overlay,
aagl,
swaytreesave,
vintage-story,
... ...
}: let }: let
userName = "wyatt"; userName = "wyatt";
userEmail = "wyatt@wyattjmiller.com"; userEmail = "wyatt@wyattjmiller.com";
extraSpecialArgs = { extraSpecialArgs = {
inherit userName userEmail ghostty; inherit userName userEmail swaytreesave;
};
myOverlays = { ... }: {
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
aagl.overlays.default
self.common.overlays
];
}; };
in { in {
meta = import ./meta; meta = import ./meta;
common = {
overlays = import ./modules/common/overlays.nix;
};
# Primary laptop - MacBook Pro (2023, M3) # Primary laptop - MacBook Pro (2023, M3)
darwinConfigurations."sephiroth" = darwin.lib.darwinSystem { darwinConfigurations."sephiroth" = darwin.lib.darwinSystem {
system = "aarch64-darwin"; system = "aarch64-darwin";
specialArgs = { specialArgs = {
inherit userName userEmail ghostty; inherit userName userEmail;
hostname = "sephiroth"; hostname = "sephiroth";
role = "devel"; role = "workstation";
}; };
modules = [ modules = [
myOverlays
./modules/common ./modules/common
./modules/machine/sephiroth ./modules/machine/sephiroth
@@ -48,7 +74,9 @@
{ {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs; home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = false; role = "workstation"; };
# home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.backupFileExtension = "bak";
home-manager.users.${userName} = import ./home; home-manager.users.${userName} = import ./home;
} }
]; ];
@@ -58,11 +86,12 @@
nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem { nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = { specialArgs = {
inherit userName userEmail ghostty; inherit userName userEmail aagl vintage-story;
hostname = "cloud"; hostname = "cloud";
role = "devel"; role = "workstation";
}; };
modules = [ modules = [
myOverlays
nix-flatpak.nixosModules.nix-flatpak nix-flatpak.nixosModules.nix-flatpak
./modules/common ./modules/common
./modules/machine/cloud ./modules/machine/cloud
@@ -71,7 +100,8 @@
{ {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs; home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "workstation"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [ home-manager.users.${userName}.imports = [
./home ./home
]; ];
@@ -88,6 +118,7 @@
role = "server"; role = "server";
}; };
modules = [ modules = [
myOverlays
./modules/common ./modules/common
./modules/machine/valefor ./modules/machine/valefor
@@ -96,6 +127,7 @@
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs; home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [ home-manager.users.${userName}.imports = [
./home ./home
]; ];
@@ -112,6 +144,7 @@
role = "server"; role = "server";
}; };
# modules = [ # modules = [
# myOverlays
# nix-flatpak.nixosModules.nix-flatpak # nix-flatpak.nixosModules.nix-flatpak
# nix-ld.nixosModules.nix-ld # nix-ld.nixosModules.nix-ld
# ./modules/nixos/hardware-configuration.nix # ./modules/nixos/hardware-configuration.nix
@@ -124,11 +157,88 @@
# home-manager.useGlobalPkgs = true; # home-manager.useGlobalPkgs = true;
# home-manager.useUserPackages = true; # home-manager.useUserPackages = true;
# home-manager.extraSpecialArgs = extraSpecialArgs; # home-manager.extraSpecialArgs = extraSpecialArgs;
# home-manager.backupFileExtension = "bak";
# home-manager.users.${userName}.imports = [ # home-manager.users.${userName}.imports = [
# ./home # ./home
# ]; # ];
# } # }
# ]; # ];
}; };
# Vintage story server
nixosConfigurations."thancred" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail vintage-story;
hostname = "thancred";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/thancred
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
];
}
];
};
# Matrix and Mastodon server
nixosConfigurations."yshtola" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
hostname = "yshtola";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/yshtola
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
];
}
];
};
# generic non-NixOS Linux machine
homeConfigurations."generic" = let
hostname = builtins.getEnv "HOSTNAME";
system = "x86_64-linux";
in home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
extraSpecialArgs = {
inherit userName userEmail hostname;
isNixOS = false;
role = "workstation";
};
modules = [
{
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
self.common.overlays
];
}
./home
];
};
}; };
} }

View File

@@ -1,6 +1,7 @@
{...}: { { pkgs, ...}: {
programs.atuin = { programs.atuin = {
enable = true; enable = true;
enableFishIntegration = true; enableFishIntegration = true;
package = pkgs.atuinLatest;
}; };
} }

17
home/bat.nix Normal file
View File

@@ -0,0 +1,17 @@
{ pkgs, ... }: {
programs.bat = {
enable = true;
config.theme = "catppuccin";
themes.catppuccin = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "bat";
rev = "ba4d16880d63e656acced2b7d4e034e4a93f74b1";
hash = "sha256-6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw=";
};
file = "/Catppuccin-mocha.tmTheme";
};
};
}

View File

@@ -1,6 +1,7 @@
{ {
pkgs, pkgs,
lib, lib,
isNixOS ? true,
... ...
}: { }: {
programs.firefox = { programs.firefox = {
@@ -9,7 +10,7 @@
}; };
programs.chromium = { programs.chromium = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux && isNixOS;
package = pkgs.ungoogled-chromium.override { package = pkgs.ungoogled-chromium.override {
enableWideVine = true; enableWideVine = true;
commandLineArgs = [ commandLineArgs = [
@@ -40,14 +41,37 @@
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn"; sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn";
# sha256 = lib.fakeSha256; # sha256 = lib.fakeSha256;
version = "1.64.0"; version = "1.67.0";
}) })
(createChromiumExtension { (createChromiumExtension {
# bitwarden # bitwarden
id = "nngceckbapebfimnlniiiahkandclblb"; id = "nngceckbapebfimnlniiiahkandclblb";
sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi"; sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi";
# sha256 = lib.fakeSha256; version = "2025.10.0";
version = "2025.5.0"; })
(createChromiumExtension {
# react dev tools
id = "fmkadmapgofadopljbjfkapdkoienihi";
sha256 = "sha256:01vy0x7hdkj4g3m2l4kw5rwldhhpkcxmd2miy5rj2dzxdnbchw2z";
version = "7.0.1";
})
(createChromiumExtension {
# wappalyzer
id = "gppongmhjkpfnbhagpmjfkannfbllamg";
sha256 = "sha256:1mi1wpm714r8yp0zh0yg6kccnld36rj4xb8j4y0c18y9176vc6wx";
version = "6.10.86";
})
(createChromiumExtension {
# obsidian web clipper
id = "cnjifjpddelmedmihgijeibhnjfabmlf";
sha256 = "sha256:0bp6g63g9hk2xbq054lpf5hzwmn73jzh3hswyjfp9r7yqj83mzgy";
version = "0.12.0";
})
(createChromiumExtension {
# dark reader
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
sha256 = "sha256:06a9dz589i1da519kivzp7bljksl2xxsd151y7ww0hx28jd1694b";
version = "4.9.113";
}) })
]; ];
}; };

View File

@@ -1,60 +1,59 @@
{ { lib
lib, , pkgs
pkgs, , userName
userName, , swaytreesave
userEmail, , isNixOS ? true
ghostty, , ...
...
}: let }: let
# Have a file sturcture that holds all the configuration files that can't be configured by Nix # Have a file sturcture that holds all the configuration files that can't be configured by Nix
# or maybe I'm too lazy to do anything about it? I dunno # or maybe I'm too lazy to do anything about it? I dunno
dirs = { dirs = {
defaults = ../defaults; defaults = ../defaults;
}; };
in { in
{
_module.args = {
inherit dirs;
};
# Import sub modules # Import sub modules
imports = map (module: import module {inherit lib pkgs dirs userName userEmail ghostty;}) [ imports = [
./atuin.nix
./shell.nix
./packages ./packages
./git.nix
./starship.nix
./eza.nix
./neovim.nix
./direnv.nix
./sway.nix
./terminal.nix
./browser.nix
]; ];
# Home Manager needs a bit of information about you and the home = lib.mkMerge [
# paths it should manage. {
home = { username = userName;
username = userName; homeDirectory =
homeDirectory = if pkgs.stdenv.isDarwin
if pkgs.stdenv.isDarwin then "/Users/${userName}"
then "/Users/${userName}" else "/home/${userName}";
else "/home/${userName}";
sessionVariables = { stateVersion = "24.11";
XDG_CURRENT_DESKTOP = "sway"; }
XDG_SESSION_TYPE = "wayland";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
};
pointerCursor = lib.mkIf pkgs.stdenv.isLinux { (lib.mkIf isNixOS {
gtk.enable = true; sessionVariables = {
package = pkgs.catppuccin-cursors.mochaDark; XDG_CURRENT_DESKTOP = "sway";
name = "catppuccin-mocha-dark-cursors"; XDG_SESSION_TYPE = "wayland";
size = 22; XDG_SESSION_DESKTOP = "sway";
}; XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
};
})
stateVersion = "24.11"; (lib.mkIf pkgs.stdenv.isLinux {
}; pointerCursor = {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
})
];
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;

View File

@@ -15,7 +15,7 @@
extraConfig = { extraConfig = {
init.defaultBranch = "master"; init.defaultBranch = "master";
push.autoSetupRemote = true; push.autoSetupRemote = true;
pull.merge = true; pull.rebase = false;
merge.tool = "nvimdiff"; merge.tool = "nvimdiff";
mergetool.keepBackup = false; mergetool.keepBackup = false;
}; };
@@ -31,6 +31,7 @@
a = "add"; a = "add";
ap = "add -p"; ap = "add -p";
br = "branch"; br = "branch";
cb = "checkout -b";
co = "checkout"; co = "checkout";
st = "status -sb"; st = "status -sb";
status = "status -sb"; status = "status -sb";
@@ -40,6 +41,11 @@
ca = "commit -am"; ca = "commit -am";
dc = "diff --cached"; dc = "diff --cached";
amend = "commit --amend -m"; amend = "commit --amend -m";
wipe = "reset --hard";
gg = "reset --hard";
ggs = "reset --hard";
sw = "switch";
r = "restore";
# aliases for submodules # aliases for submodules
update = "submodule update --init --recursive"; update = "submodule update --init --recursive";

32
home/k9s.nix Normal file
View File

@@ -0,0 +1,32 @@
{ pkgs, ... }: {
programs.k9s = {
enable = true;
package = pkgs.k9s;
settings.k9s = {
refreshRate = "2s";
liveViewAutoRefresh = false;
apiServerTimeout = "30s";
maxConnRetry = 5;
readOnly = true;
noExitOnCtrlC = false;
portForwardAddress = "localhost";
skipLatestRevCheck = false;
skin = {
catppuccin-mocha = ../defaults/k9s/catppuccin-mocha.yaml;
};
ui = {
skin = "catppuccin-mocha";
enableMouse = true;
headless = false;
logoless = true;
crumbsless = false;
splashless = true;
reactive = false;
noIcons = false;
defaultsToFullscreen = false;
};
};
};
}

14
home/krew.nix Normal file
View File

@@ -0,0 +1,14 @@
{ pkgs, lib, ... }:
with pkgs;
let
plugins = [
"krew"
"oidc-login"
];
in {
home.activation.krew = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
${lib.concatMapStringsSep "\n" (plugin: ''
$DRY_RUN_CMD ${krew}/bin/krew install ${plugin} || true
'') plugins}
'';
}

View File

@@ -1,6 +1,7 @@
{...}: { { pkgs, ... }: {
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
package = pkgs.lazygitLatest;
settings = { settings = {
gui.theme = { gui.theme = {

View File

@@ -1,4 +1,8 @@
{dirs, ...}: { {...}: let
dirs = {
defaults = ../defaults;
};
in {
programs.neovim = { programs.neovim = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;

View File

@@ -1,11 +1,20 @@
{ {
lib,
pkgs, pkgs,
... ...
}: { }: {
home.packages = with pkgs; [ imports = [
nnn # terminal file manager ../atuin.nix
../shell.nix
../git.nix
../starship.nix
../eza.nix
../neovim.nix
../bat.nix
];
nixpkgs.config.allowUnfree = true;
home.packages = with pkgs; [
# archives # archives
zip zip
xz xz
@@ -13,42 +22,21 @@
p7zip p7zip
# utils # utils
zellij yazi
tmux tmux
bat
lazygit
bottom bottom
ripgrep ripgrep
jq jq
yq-go yq-go
fzf fzf
fh
aria2 aria2
yt-dlp gnupg
obsidian
vscode
weechat
inetutils
# misc # misc
cowsay
file file
which which
tree tree
gnutar gnutar
gnupg
zoxide
babelfish babelfish
# language-specific package managers
nodejs
cargo
python3
# nix specific stuff
nixd
deadnix
alejandra
statix
]; ];
} }

View File

@@ -1,10 +1,7 @@
{ { lib, pkgs, ... }:
pkgs, lib.mkIf pkgs.stdenv.isDarwin {
lib, home.packages = with pkgs; [
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isDarwin (with pkgs; [
discord discord
ollama ollama
]); ];
} }

View File

@@ -1,11 +1,11 @@
{ lib, role ? "workstation", ... }:
{ {
pkgs, imports =
lib, [
... ./common.nix
}: { ./darwin.nix
imports = [ ./linux.nix
./common.nix ]
./darwin.nix ++ lib.optional (role == "workstation") ./workstation.nix
./linux.nix ++ lib.optional (role == "server") ./server.nix;
];
} }

View File

@@ -1,16 +1,16 @@
{ { lib, pkgs, isNixOS ? true, ... }:
pkgs, lib.mkIf pkgs.stdenv.isLinux {
lib, home.packages = with pkgs; [
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
imv imv
betterdiscordctl
vesktop
xdg-utils xdg-utils
mcrcon ] ++ lib.optionals isNixOS [
vesktop
xfce.thunar xfce.thunar
pavucontrol pavucontrol
# ungoogled-chromium zathura
]); gpu-screen-recorder
gpu-screen-recorder-gtk
inetutils
easyeffects
];
} }

View File

@@ -0,0 +1,4 @@
{ pkgs, ... }: {
home.packages = [
];
}

View File

@@ -0,0 +1,37 @@
{
lib,
pkgs,
isNixOS ? true,
...
}: {
imports = [
../terminal.nix
../browser.nix
../zellij.nix
../lazygit.nix
../k9s.nix
../krew.nix
../direnv.nix
] ++ lib.optional isNixOS ../sway.nix;
home.packages = with pkgs; [
fh
kubectl # kube config is deliberately not included
kubectx
vscode
yt-dlp
weechat
nodejs
cargo
python3
nixd
deadnix
alejandra
statix
gh
ghDashLatest
diffNavLatest
] ++ lib.optionals isNixOS [
obsidian
];
}

View File

@@ -1,9 +1,11 @@
{pkgs, ...}: { {pkgs, lib, ...}: {
programs.fish = { programs.fish = {
enable = true; enable = true;
# initExtra = '' shellInit = ''
# export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin" if test -d $HOME/.krew/bin
# ''; set -gx PATH $HOME/.krew/bin $PATH
end
'';
shellAliases = { shellAliases = {
# ls aliases # ls aliases
@@ -43,7 +45,31 @@
"Can I get a waffle? Can I please get a waffle?" \ "Can I get a waffle? Can I please get a waffle?" \
"I'm lesbian. I thought you were American." \ "I'm lesbian. I thought you were American." \
"You gotta give 'em that 'hawk tuah' and spit on that thang!" \ "You gotta give 'em that 'hawk tuah' and spit on that thang!" \
"We don't do that here..." "We don't do that here..." \
"What are those?! They are my crocs..." \
"It's an avocado... Thanks!" \
"I am once again asking for your financial support" \
"Is that a weed?" \
"No, this is Patrick!" \
"Come ride, heroes, ride" \
"Away with the tide" \
"Concede your mind unto the fiend" \
"Darkness come, rend the shield of light" \
"The sun is setting, darkness taking over - a date with chaos and you're dressed to the nines" \
"Now kneel overdweller, your lord commands, there's no salvation for the sons of man" \
"Snap click clank whirr whizz wham boom!" \
"Rohs an kyn ala na" \
"If youve brought your ivory standard, Ill be happy to tell you where you can stick it" \
"Speeches? Oh, yes, I love them. There's nothing like a good exposition when you're having trouble sleeping!" \
"Somehow, the boy just isn't very buoyant" \
"I am...not interested, little sun. Try again when you have become a man" \
"I am rightousness! And rightousness shall previal!" \
"Ahhh such bliss!" \
"The gods themselves will be my meal. Your dear companions my dessert. Upon this world I'll feast, and death shall follow in my wake. All your hate, all your rage, you will render unto me." \
"Boring, boring, boring" \
"Would you be 'happier' had I a 'good reason'?" \
"A test of your reflexes!"
set choose_meme (random)"%"(count $memes) set choose_meme (random)"%"(count $memes)
set choose_meme $memes[(math $choose_meme"+1")] set choose_meme $memes[(math $choose_meme"+1")]
@@ -52,6 +78,27 @@
''; '';
onEvent = "fish_greeting"; onEvent = "fish_greeting";
}; };
} // lib.optionalAttrs pkgs.stdenv.isLinux {
block = {
body = ''
systemd-inhibit --what=sleep --who="$USER" --why="manual invocation" --mode=block sleep infinity &
set -g INHIBIT_PID $last_pid
echo "Sleep inhibited. PID: $INHIBIT_PID"
'';
};
unblock = {
body = ''
if set -q INHIBIT_PID
kill $INHIBIT_PID 2>/dev/null
and echo "Sleep inhibitor removed. PID: $INHIBIT_PID"
or echo "Failed to kill process or already terminated."
set -e INHIBIT_PID
else
echo "No active sleep inhibitor found."
end
'';
};
}; };
}; };

View File

@@ -1,6 +1,7 @@
{ {
lib, lib,
pkgs, pkgs,
swaytreesave,
... ...
}: let }: let
dirs = { dirs = {
@@ -15,6 +16,12 @@
hash = "sha256-ZDFbI69ECsUTjbhlw2kHRufZbQMu+FQSMmncCJ5pagg="; hash = "sha256-ZDFbI69ECsUTjbhlw2kHRufZbQMu+FQSMmncCJ5pagg=";
}; };
in { in {
imports = [
swaytreesave.homeManagerModules.default
];
programs.swaytreesave.enable = if pkgs.stdenv.isLinux then true else false;
wayland.windowManager.sway = { wayland.windowManager.sway = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
extraOptions = []; # Extra arguments to pass into sway. If sway goes haywire, we might need something in here extraOptions = []; # Extra arguments to pass into sway. If sway goes haywire, we might need something in here
@@ -29,26 +36,124 @@ in {
xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config); xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config);
xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config); xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config);
xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css); xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css);
programs.rofi.enable = pkgs.stdenv.isLinux;
services.mako.enable = pkgs.stdenv.isLinux; programs.wofi = {
enable = pkgs.stdenv.isLinux;
settings = {
width=600;
height=350;
location="center";
show="drun";
prompt="Search...";
filter_rate=100;
allow_markup=true;
no_actions=true;
halign="fill";
orientation="vertical";
content_halign="fill";
insensitive=true;
allow_images=true;
image_size=40;
gtk_dark=true;
};
style = ''
@define-color selected-text #8caaee;
@define-color text #c6d0f5;
@define-color base #24273a;
* {
font-family: 'Monaspace Krypton 9', monospace;
font-size: 18px;
}
window {
margin: 0px;
padding: 20px;
background-color: @base;
opacity: 0.95;
}
#inner-box {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#outer-box {
margin: 0;
padding: 20px;
border: none;
background-color: @base;
}
#scroll {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#input {
margin: 0;
padding: 10px;
border: none;
background-color: @base;
color: @text;
}
#input:focus {
outline: none;
box-shadow: none;
border: none;
}
#text {
margin: 5px;
border: none;
color: @text;
}
#entry {
background-color: @base;
}
#entry:selected {
outline: none;
border: none;
}
#entry:selected #text {
color: @selected-text;
}
#entry image {
-gtk-icon-transform: scale(0.7);
}
'';
};
programs.swaylock.enable = pkgs.stdenv.isLinux;
services.mako = {
enable = pkgs.stdenv.isLinux;
settings = {
text-color="#cad3f5";
border-color="#c6d0f5";
background-color="#24273a";
width=420;
height=110;
padding=10;
border-size=2;
font="Monaspace Krypton 9";
anchor="top-right";
default-timeout=5000;
max-icon-size=32;
};
};
programs.waybar = { programs.waybar = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
systemd.enable = true; systemd.enable = true;
package = pkgs.waybar.overrideAttrs (old: {
version = "0.11.0";
src = pkgs.fetchFromGitHub {
owner = "Alexays";
repo = "Waybar";
rev = "d56dd6ee7fdf8c5ba4e90790af62b7f7829d3a47";
sha256 = "sha256-3lc0voMU5RS+mEtxKuRayq/uJO09X7byq6Rm5NZohq8=";
fetchSubmodules = true;
};
buildInputs = old.buildInputs ++ [ pkgs.fftw pkgs.libcava ];
# mesonFlags = (old.mesonFlags or []) ++ [ "-Dcava=disabled" ];
});
}; };
} }

View File

@@ -1,4 +1,4 @@
{ lib, pkgs, ghostty, ... }: { { pkgs, ... }: {
programs.alacritty = { programs.alacritty = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
settings = { settings = {
@@ -103,9 +103,4 @@
programs.kitty = { programs.kitty = {
enable = false; # TODO: to enable later enable = false; # TODO: to enable later
}; };
home.packages = if pkgs.stdenv.isLinux then
[ ghostty.packages.${pkgs.system}.default ]
else
[ ];
} }

14
home/zellij.nix Normal file
View File

@@ -0,0 +1,14 @@
{
lib,
...
}: let
dirs = {
defaults = ../defaults;
};
in {
programs.zellij = {
enable = true;
};
xdg.configFile."zellij/config.kdl".source = lib.mkForce (dirs.defaults + /zellij/config.kdl);
}

0
lib/checkSystem.nix Normal file
View File

19
modules/apps/appimage.nix Normal file
View File

@@ -0,0 +1,19 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.appimage;
in {
options.appimage = {
enable = mkEnableOption "AppImage support";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
appimageupdate
appimage-run
];
};
}

View File

@@ -1,12 +1,17 @@
{ {
config, config,
lib, lib,
pkgs, pkgs,
inputs, aagl,
vintage-story,
... ...
}: let }: let
cfg = config.gaming; cfg = config.gaming;
in { in {
imports = [
aagl.nixosModules.default
];
options.gaming = { options.gaming = {
steam = { steam = {
enable = lib.mkEnableOption "Steam gaming platform"; enable = lib.mkEnableOption "Steam gaming platform";
@@ -63,6 +68,14 @@ in {
}; };
}; };
vkbasalt = {
enable = lib.mkEnableOption "vkBasalt/ReShade/GShade post processing shaders";
};
mangohud = {
enable = lib.mkEnableOption "OpenGL/Vulkan overlay tool shown in games presenting FPS, CPU/GPU/memory utilization, load, etc.";
};
lutris = { lutris = {
enable = lib.mkEnableOption "Lutris game manager and launcher"; enable = lib.mkEnableOption "Lutris game manager and launcher";
package = lib.mkOption { package = lib.mkOption {
@@ -110,12 +123,37 @@ in {
enable = lib.mkEnableOption "Final Fantasy XIV and it's accompanied (unofficial) launcher"; enable = lib.mkEnableOption "Final Fantasy XIV and it's accompanied (unofficial) launcher";
}; };
reshade = { # TODO: when aagl gets it's unified launcher all finished/in a stable state, transition to that launcher
enable = lib.mkEnableOption "ReShade, a post-processing injector for games and video software"; aagl = {
anime-game-launcher = {
enable = lib.mkEnableOption "Genshin Impact launcher (legacy)";
};
honkers-railway-launcher = {
enable = lib.mkEnableOption "Honkai: Star Rail launcher";
};
honkers-launcher = {
enable = lib.mkEnableOption "Honkai: Impact 3rd launcher";
};
wavey-launcher = {
enable = lib.mkEnableOption "Wuthering Waves launcher";
};
sleepy-launcher = {
enable = lib.mkEnableOption "Zenless Zone Zero (ZZZ) launcher";
};
};
vintage-story = {
enable = lib.mkEnableOption "Vintage Story client and server";
}; };
}; };
config = { config = let
agl = cfg.aagl;
in {
programs.steam = lib.mkIf cfg.steam.enable { programs.steam = lib.mkIf cfg.steam.enable {
enable = true; enable = true;
remotePlay.openFirewall = cfg.steam.firewall.remotePlay; remotePlay.openFirewall = cfg.steam.firewall.remotePlay;
@@ -144,6 +182,26 @@ in {
]; ];
}; };
programs.anime-game-launcher = lib.mkIf agl.anime-game-launcher.enable {
enable = true;
};
programs.honkers-railway-launcher = lib.mkIf agl.honkers-railway-launcher.enable {
enable = true;
};
programs.honkers-launcher = lib.mkIf agl.honkers-launcher.enable {
enable = true;
};
programs.wavey-launcher = lib.mkIf agl.wavey-launcher.enable {
enable = true;
};
programs.sleepy-launcher = lib.mkIf agl.sleepy-launcher.enable {
enable = true;
};
environment.systemPackages = environment.systemPackages =
(lib.optionals cfg.lutris.enable ( (lib.optionals cfg.lutris.enable (
[cfg.lutris.package] ++ [cfg.lutris.package] ++
@@ -159,7 +217,20 @@ in {
cfg.lutris.extraPackages cfg.lutris.extraPackages
)) ++ )) ++
(lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++ (lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher]) ++ (lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher pkgs.fflogs]) ++
(lib.optionals cfg.reshade.enable [inputs.packages.${pkgs.system}.reshade]); (lib.optionals cfg.vintage-story.enable [vintage-story.packages.${pkgs.system}.default]) ++
(lib.optionals cfg.vkbasalt.enable [pkgs.vkbasalt pkgs.vkbasalt-cli]) ++
(lib.optionals cfg.mangohud.enable [pkgs.mangohud]) ++
(lib.optionals (cfg.vkbasalt.enable || cfg.mangohud.enable) [pkgs.goverlay pkgs.mesa-demos pkgs.vulkan-tools]);
nix.settings = let
inherit agl;
in (lib.mkIf
(agl.anime-game-launcher.enable || agl.honkers-railway-laucher.enable || agl.honkers-launcher.enable || agl.wavey-launcher.enable || agl.sleepy-launcher.enable)
{
substituters = [ "https://ezkea.cachix.org" ];
trusted-public-keys = [ "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" ];
}
);
}; };
} }

View File

@@ -7,3 +7,11 @@ Licensed by the Mozilla Public License v2
## Synopsis ## Synopsis
This is the directory that holds shared configuration files amongst computers that I own. They are called by the root `flake.nix` file. This is the directory that holds shared configuration files amongst computers that I own. They are called by the root `flake.nix` file.
Here's a quick synopsis of each file:
- core: Sane Nix options that I set for myself
- environment: Core packages and environment variables to be set and installed
- fonts: Fonts and icons that are to be installed
- overlays: Customized packages tailored to my needs
- users: Users to be set on my system

View File

@@ -8,6 +8,9 @@
# Allow unfree packages # Allow unfree packages
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
"mbedtls-2.28.10"
];
nix.package = pkgs.nix; nix.package = pkgs.nix;

View File

@@ -1,11 +1,9 @@
{ { ... }: {
pkgs,
lib,
...
}: {
imports = [ imports = [
./core.nix ./core.nix
./environment.nix
./fonts.nix ./fonts.nix
# ./overlays.nix
./users.nix ./users.nix
]; ];
} }

View File

@@ -0,0 +1,22 @@
{ lib, pkgs, ... }: {
environment.systemPackages = with pkgs; [
git
vim
neovim
usbutils
coreutils
pciutils
patchelf
htop
] ++
lib.optionals pkgs.stdenv.isLinux (with pkgs; [
systemd
lshw
dmidecode
]) ++
lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
# nothing here, yet ;)
]);
environment.variables.EDITOR = "nvim";
}

View File

@@ -6,10 +6,14 @@
fonts.packages = with pkgs; fonts.packages = with pkgs;
[ [
noto-fonts noto-fonts
noto-fonts-emoji noto-fonts-color-emoji
liberation_ttf liberation_ttf
noto-fonts-cjk-sans noto-fonts-cjk-sans
monaspace monaspace
] ]
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
environment.systemPackages = with pkgs; [
adwaita-icon-theme
];
} }

62
modules/common/linker.nix Normal file
View File

@@ -0,0 +1,62 @@
{ pkgs, ... }: {
programs.nix-ld = {
enable = true;
libraries = with pkgs;
[
acl
attr
bzip2
dbus
expat
fontconfig
freetype
fuse3
icu
libnotify
libsodium
libssh
libunwind
libusb1
libuuid
nspr
nss
stdenv.cc.cc
util-linux
zlib
zstd
pipewire
cups
libxkbcommon
pango
mesa
libdrm
libglvnd
libpulseaudio
atk
cairo
alsa-lib
at-spi2-atk
at-spi2-core
gdk-pixbuf
glib
gtk3
libGL
libappindicator-gtk3
vulkan-loader
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxcb
xorg.libxkbfile
xorg.libxshmfence
];
};
}

128
modules/common/overlays.nix Normal file
View File

@@ -0,0 +1,128 @@
final: prev: let
rust_latest = prev.rust-bin.stable.latest.default;
golang_latest = prev.go-bin.latestStable;
buildGoModuleLatest = prev.buildGoModule.override {
go = golang_latest;
};
myRustPlatform = prev.makeRustPlatform {
cargo = rust_latest;
rustc = rust_latest;
};
in {
lazygitLatest = prev.lazygit.overrideAttrs (_: rec {
version = "0.61.0";
src = prev.fetchFromGitHub {
owner = "jesseduffield";
repo = "lazygit";
rev = "v${version}";
hash = "sha256-G7JulCK9WUVWbp1V7lYuM3fehCdn1cNAJHYjr3aKDvQ=";
};
vendorHash = null;
subPackages = [ "." ];
ldflags = [
"-X main.version=${version}"
"-X main.buildSource=nix"
];
});
atuinLatest = (prev.atuin.override {
rustPlatform = myRustPlatform;
}).overrideAttrs (oldAttrs: rec {
version = "18.13.6";
src = prev.fetchFromGitHub {
owner = "atuinsh";
repo = "atuin";
rev = "v${version}";
hash = "sha256-yAw+ty6FUnFbiRTdAe2QQHzj6uU24fZ/bEIXcHl/thg=";
};
cargoDeps = myRustPlatform.fetchCargoVendor {
# name = "atuin-${version}-vendor.tar.gz";
inherit src;
hash = "sha256-jirVe0+N5+UHZWioj8AipUhawMBameqEJJpa8HPTnfw=";
};
cargoBuildFeatures = [
"ai"
"client"
"clipboard"
"daemon"
"hex"
"sync"
];
cargoCheckFeatures = cargoBuildFeatures;
preCheck = (oldAttrs.preCheck or "") + ''
export HOME="$TMPDIR"
export XDG_CONFIG_HOME="$TMPDIR/.config"
export XDG_DATA_HOME="$TMPDIR/.local/share"
export XDG_STATE_HOME="$TMPDIR/.local/state"
mkdir -p "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_STATE_HOME"
'';
});
# k9sLatest = prev.k9s.overrideAttrs (oldAttrs: rec {
# version = "0.30.16";
# src = prev.fetchFromGitHub {
# owner = "derailed";
# repo = "k9s";
# rev = "v${version}";
# hash = "sha256-1z6r6v3n1p6vd2q6n4pl5q3f7q3q7q1p7j5j1k3l4m5n6o7p8q9r";
# };
# ldflags = [
# "-X github.com/derailed/k9s/version.Version=${version}"
# "-X github.com/derailed/k9s/version.BuildSource=nix"
# ];
# });
ghDashLatest = (prev.gh-dash.override {
buildGoModule = buildGoModuleLatest;
}).overrideAttrs (oldAttrs: rec {
version = "4.23.2";
src = prev.fetchFromGitHub {
owner = "dlvhdr";
repo = "gh-dash";
rev = "v${version}";
hash = "sha256-C06LPVoE23ITJpMG0x75Djgeup+eb5uYwA8wL7xxvWU=";
};
vendorHash = "sha256-4AbeoH0l7eIS7d0yyJxM7+woC7Q/FCh0BOJj3d1zyX4=";
doCheck = false;
checkFlags = [
"-skip=TestFullOutput"
];
ldflags = [
"-s"
"-w"
"-X github.com/dlvhdr/gh-dash/v4/cmd.Version=${version}"
];
passthru = (oldAttrs.passthru or {}) // {
tests = {
version = oldAttrs.testers.testVersion { package = final.ghDashLatest; };
};
};
});
diffNavLatest = (prev.diffnav.override {
buildGoModule = buildGoModuleLatest;
}).overrideAttrs (_: rec {
version = "0.10.0";
src = prev.fetchFromGitHub {
owner = "dlvhdr";
repo = "diffnav";
rev = "v${version}";
hash = "sha256-6VtAQzZNLQrf8QYVXxLUgb3F6xguFDbwaE9kahPhbSE=";
};
vendorHash = "sha256-gmmckzR0D1oFuTG5TAb6gLMoNbcZl9EsjbFjhPfJqnQ=";
ldflags = [
"-s"
"-w"
];
});
}

View File

@@ -1,35 +1,38 @@
{ lib, pkgs, userName, hostname, ... }:
{ {
lib,
pkgs,
userName,
hostname,
...
} @ args: {
imports = [
../security/sudo.nix
];
networking.hostName = hostname; networking.hostName = hostname;
# Don't forget to set a password with passwd! users.users."${userName}" = {
users.users."${userName}" = lib.mkMerge [ home = if pkgs.stdenv.isDarwin
{ then "/Users/${userName}"
home = else "/home/${userName}";
if pkgs.stdenv.isDarwin description = userName;
then "/Users/${userName}" } // lib.optionalAttrs pkgs.stdenv.isLinux {
else "/home/${userName}"; group = "${userName}";
description = userName; isNormalUser = true;
} };
(lib.mkIf (pkgs.stdenv.isLinux) {
group = "${userName}";
isNormalUser = true;
})
];
security.sudo.needsPassword = false;
users.groups.wyatt = {}; users.groups.wyatt = {};
nix.settings.trusted-users = [userName]; nix.settings.trusted-users = [userName];
security = lib.optionalAttrs pkgs.stdenv.isLinux {
sudo.extraRules = [
{
groups = [ "wheel" ];
commands = [
{
command = "ALL";
options = [ "NOPASSWD" "SETENV" ];
}
];
}
];
};
environment = lib.optionalAttrs pkgs.stdenv.isDarwin {
etc."sudoers.d/wheel-nopasswd".text = ''
%wheel ALL=(ALL:ALL) NOPASSWD: SETENV: ALL
'';
};
} }

View File

@@ -40,7 +40,6 @@ in {
config = mkIf cfg.enable (mkMerge [ config = mkIf cfg.enable (mkMerge [
{ {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
glxinfo
vulkan-tools vulkan-tools
mesa-demos mesa-demos
]; ];
@@ -62,9 +61,9 @@ in {
(mkIf (cfg.gpuVendor == "amd") { (mkIf (cfg.gpuVendor == "amd") {
services.xserver.videoDrivers = ["amdgpu"]; services.xserver.videoDrivers = ["amdgpu"];
hardware.graphics.extraPackages = with pkgs; [ # hardware.graphics.extraPackages = with pkgs; [
amdvlk # amdvlk
]; # ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
radeontop radeontop
]; ];

View File

@@ -10,6 +10,10 @@ I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
These are named after Final Fantasy VII characters. These are named after Final Fantasy VII characters.
### Servers/Network Infrastructure ### Servers/Network Infrastructure (bare metal)
These are named after Final Fantasy summons. These are named after Final Fantasy summons. There is some infrastructure missing here like my routers and switches that I also name after summons.
### Servers/Network Infrastructure (virtual machines)
These are named after Final Fantasy XIV Online characters (currently, these are named after the Scions of the Seventh Dawn).

View File

@@ -1,8 +1,8 @@
{ {
config,
lib, lib,
pkgs, pkgs,
userName, userName,
aagl,
... ...
}: let }: let
flatpakPackages = [ flatpakPackages = [
@@ -18,14 +18,16 @@
in { in {
imports = [ imports = [
(import ../../apps/flatpak.nix { (import ../../apps/flatpak.nix {
inherit lib pkgs flatpakPackages; inherit lib pkgs flatpakPackages userName aagl;
}) })
../../apps/gaming.nix ../../apps/gaming.nix
../../apps/appimage.nix
../../graphics ../../graphics
../../pwrMgmt ../../pwrMgmt
../../networking/core.nix ../../networking/core.nix
../../sound/pipewire.nix ../../sound/pipewire.nix
../../sound/shairport.nix ../../sound/shairport.nix
../../sound/focusrite.nix
../../virtualization/podman.nix ../../virtualization/podman.nix
../../virtualization/hardware.nix ../../virtualization/hardware.nix
]; ];
@@ -34,9 +36,13 @@ in {
nix.settings.experimental-features = ["nix-command" "flakes"]; nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff # Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest; boot = {
boot.loader.systemd-boot.enable = true; kernelPackages = pkgs.linuxPackages_latest;
boot.loader.efi.canTouchEfiVariables = true; loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
# Enable Bluetooth if present # Enable Bluetooth if present
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
@@ -46,40 +52,23 @@ in {
# Install packages to be installed system-wide # Install packages to be installed system-wide
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
vim
neovim
git
wireguard-tools wireguard-tools
grim grim
slurp slurp
playerctl playerctl
light light
brightnessctl brightnessctl
firefox
wttrbar wttrbar
cliphist cliphist
patchelf xdg-desktop-portal-gtk
nix-ld xdg-utils
flatpak-xdg-utils
desktop-file-utils
shared-mime-info
wl-clipboard
wl-clip-persist
]; ];
# Set the EDITOR global environment variable to neovim
environment.variables.EDITOR = "nvim";
# Enable OpenSSH
services.openssh.enable = true;
# Enable keyring
services.gnome.gnome-keyring.enable = true;
# Enable GnuPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
programs.mtr.enable = true;
# Enable Polkit # Enable Polkit
security.polkit.enable = true; security.polkit.enable = true;
@@ -100,8 +89,10 @@ in {
localNetworkGameTransfers = true; localNetworkGameTransfers = true;
}; };
}; };
vkbasalt.enable = true;
gamemode.enable = true; gamemode.enable = true;
gamescope.enable = true; gamescope.enable = true;
mangohud.enable = true;
lutris = { lutris = {
enable = true; enable = true;
wine = { wine = {
@@ -111,14 +102,12 @@ in {
compatibility = { compatibility = {
protonSupport = true; protonSupport = true;
}; };
extraPackages = with pkgs; [
gamemode
mangohud
];
}; };
ffxiv.enable = true; ffxiv.enable = true;
minecraft.enable = true; minecraft.enable = true;
aagl.anime-game-launcher.enable = true;
vintage-story.enable = true;
}; };
# Power management (see ../../pwrMgmt/default.nix) # Power management (see ../../pwrMgmt/default.nix)
@@ -147,28 +136,54 @@ in {
networkManager.enable = true; networkManager.enable = true;
}; };
# Enable dconf programs = {
programs.dconf.enable = true; # Enable GnuPG
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
mtr.enable = true;
# Enable dconf
dconf.enable = true;
};
# Add username to groups "wheel" and "video" - more may be added here later # Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network"]; users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network" "libvirtd"];
# Flatpak packages (see ../../apps/flatpak.nix) services = {
services.flatpak.packages = flatpakPackages; # Enable OpenSSH
openssh.enable = true;
# Enable keyring
gnome.gnome-keyring.enable = true;
# Flatpak packages (see ../../apps/flatpak.nix)
flatpak.packages = flatpakPackages;
};
# Focusrite Scarlett audio interface support (see ../../sound/focusrite.nix)
sound.hardware.focusrite.enable = true;
# AppImage support
appimage.enable = true;
# XDG stuff # XDG stuff
xdg = { xdg = {
portal = { portal = {
enable = true; enable = true;
wlr.enable = true;
config = { config = {
sway = {
default = ["wlr" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
common = { common = {
default = [ default = ["gtk"];
"wlr" "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
];
}; };
}; };
xdgOpenUsePortal = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-wlr xdg-desktop-portal-wlr
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
@@ -176,5 +191,23 @@ in {
}; };
}; };
# sched_ext userspace CPU scheduling stuff - idk
services.scx = {
enable = true;
scheduler = "scx_bpfland";
};
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi #optional AMD hardware acceleration
obs-gstreamer
obs-vkcapture
];
};
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View File

@@ -2,5 +2,6 @@
imports = [ imports = [
./configuration.nix ./configuration.nix
./hardware-configuration.nix ./hardware-configuration.nix
../../common/linker.nix
]; ];
} }

View File

@@ -12,24 +12,24 @@
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = []; boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"]; boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = []; boot.extraModulePackages = [];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-label/COMPUTER"; device = "/dev/disk/by-uuid/f8f39aae-61d2-437d-a8e1-01066bbb3c5c";
fsType = "xfs"; fsType = "xfs";
}; };
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-label/BOOT"; device = "/dev/disk/by-uuid/B72F-087F";
fsType = "vfat"; fsType = "vfat";
options = ["fmask=0022" "dmask=0022"]; options = ["fmask=0022" "dmask=0022"];
}; };
swapDevices = [ swapDevices = [
{device = "/dev/disk/by-label/SWAP";} {device = "/dev/disk/by-uuid/6d6bcc02-20a9-4ae8-9c1e-5124fb2b2634";}
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View File

@@ -0,0 +1,121 @@
{
pkgs,
userName,
vintage-story,
...
}: {
imports = [
../../pwrMgmt
../../networking/core.nix
../../virtualization/podman.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh.enable = true;
# Enable keyring
services.gnome.gnome-keyring.enable = true;
# Enable GnuPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
programs.mtr.enable = true;
# Enable Polkit
security.polkit.enable = true;
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
network = {
firewall = {
enable = true;
tcpPorts = {
allowedPorts = [ 42420 ];
};
udpPorts = {
allowedPorts = [ 42420 ];
};
};
networkManager.enable = true;
};
environment.systemPackages = [
vintage-story.packages.${pkgs.system}.default
];
systemd.services.vintagestory-server = {
description = "Vintage Story Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
User = userName;
WorkingDirectory = "/home/${userName}";
ExecStart = "${vintage-story.packages.${pkgs.system}.default}/bin/vintagestory-server";
Restart = "on-failure";
RestartSec = "5s";
};
};
# Add username to groups "wheel" and "video" - more may be added here later
users = {
groups.hazel = {};
users = {
${userName} = {
extraGroups = [ "wheel" "network" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
};
"hazel" = {
home = "/home/hazel";
group = "hazel";
extraGroups = [ "wheel" ];
description = "hazel";
isNormalUser = true;
openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZnyiQx+k1ygX8E1lsUCB6aTdMc+OKzlZ4admlzknc5ulj0YrtUyqhbNhkNd6pP0QDBFMnXO/rzUvHp4TAyZXKFfpcBCa4zhK97ufymAfvzAjM4vRBqRNcr2n+2iRzxtolbklfjs3ocBQVxXW+pRT5wWxTgK2fcmP2xviDVldr7qte37x5YkQb5SAhYNH8tqJRnuGPe+Q0A3oN4HyHZFnrMq/HlbL5yg/0VKPTtF/IgHf+2dDz5OQQpBx3/N9u/QLwuIm9lkyOG03s0TGmE7up/i0jX2vIqp2BbGSnwdQEL/eSVZx73qQB/J62VFafg13P5yQWDJ33WSoiwhac6bg26HPmPOnCJp5R3c+7jM8N1F1ZbtsKicHSVsRg1RQSree4lchPy7FOPkCuUrB7LNE71mbpOzZNR767S6UAPaXxRw6QNYGBaDqQBwhlU8ZDF5F7EW6ahSUMOI6ECyoibzIMb56xs9osuNeUhB/BcL5sHSFpJjIbdcDLNkEKggrBl6s="
];
};
};
};
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
services.tailscale = {
enable = true;
package = pkgs.tailscale;
};
system.stateVersion = "24.11";
}

View File

@@ -0,0 +1,6 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}

View File

@@ -0,0 +1,32 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/e2e621c1-0090-472a-99d9-61c6a87bd068";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/663E-15C0";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/60104b1a-4285-4dd1-be5e-3c3dee24515a"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@@ -6,4 +6,4 @@ Licensed by the Mozilla Public License v2
## Synopsis ## Synopsis
This directory is currently empty so, currently, there's nothing to see! However, this is where the machine-specific configuration files for hostname `valefor` live, my apartment appliance server. These files get called by the root `flake.nix` file. This is where the machine-specific configuration files for hostname `valefor` live, my apartment appliance server. These files get called by the root `flake.nix` file.

View File

@@ -27,18 +27,6 @@
# Set your timezone # Set your timezone
time.timeZone = "America/Detroit"; time.timeZone = "America/Detroit";
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
vim
neovim
git
patchelf
nix-ld
];
# Set the EDITOR global environment variable to neovim
environment.variables.EDITOR = "nvim";
# Enable OpenSSH # Enable OpenSSH
services.openssh.enable = true; services.openssh.enable = true;

View File

@@ -0,0 +1,271 @@
{
pkgs,
userName,
...
}: let
# INFO: set these to your liking
matrixFqdn = "chat.wyattjmiller.com";
rtcFqdn = "rtc.wyattjmiller.com";
supportEmail = "wyatt@wyattjmiller.com";
livekitKeyFile = "/var/lib/livekit/livekit.key";
matrixRegistrationTokenFile = "/var/lib/matrix.key";
in {
imports = [
../../pwrMgmt
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
nix.settings = {
download-buffer-size = 134217728; # 128 MiB in bytes
};
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh = {
enable = true;
settings.PermitRootLogin = "no";
settings.PasswordAuthentication = false;
};
# Enable keyring
services.gnome.gnome-keyring.enable = true;
# Enable GnuPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
programs.mtr.enable = true;
# Enable Polkit
security.polkit.enable = true;
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Firewall settings (fallback, upstream way of doing things)
networking.firewall = {
enable = true;
allowedTCPPorts = [
80
443
8448
3478
5349
7880
7881
8080
8081
];
allowedUDPPorts = [
3478
7881
8448
];
allowedUDPPortRanges =[
# TURN UDP relays
{
from = 49000;
to = 50000;
}
#
{
from = 50100;
to = 50200;
}
];
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName} = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
extraGroups = ["wheel" "video" "network"];
};
# fail2ban
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
# Matrix server
services.matrix-tuwunel = {
enable = true;
package = pkgs.matrix-tuwunel;
settings = {
global = {
server_name = matrixFqdn;
allow_encryption = true;
allow_federation = true;
allow_registration = true;
registration_token = matrixRegistrationTokenFile;
allow_unstable_room_versions = false;
allow_experimental_room_versions = false;
zstd_compression = true;
new_user_displayname_suffix = "";
max_request_size = 1048575600; # 100MB in bytes, for file uploads
database_backup_path = "/var/lib/tuwunel/database_backups";
database_backups_to_keep = 2;
address = [
"127.0.0.1"
"::1"
];
port = [ 8008 ];
well_known = {
client = "https://${matrixFqdn}";
server = "${matrixFqdn}:443";
support_email = supportEmail;
support_mxid = "@wymiller:${matrixFqdn}";
rtc_transports = [{
type = "livekit";
livekit_service_url = "https://${rtcFqdn}";
}];
};
};
};
};
# LiveKit (Matrix RTC)
services.livekit = {
enable = true;
package = pkgs.livekit;
openFirewall = true;
keyFile = livekitKeyFile;
settings = {
port = 7880;
room.auto_create = true;
rtc = {
use_external_ip = true;
};
};
};
# Reverse proxy
services.caddy = {
enable = true;
package = pkgs.caddy;
virtualHosts = {
"${matrixFqdn}" = {
extraConfig = ''
encode zstd gzip
reverse_proxy localhost:8008
'';
};
"${matrixFqdn}:8448" = {
extraConfig = ''
encode zstd gzip
reverse_proxy localhost:8008
'';
};
"${rtcFqdn}" = {
extraConfig = ''
@jwt_service {
path /sfu/get* /healthz*
}
handle @jwt_service {
reverse_proxy localhost:8080
}
handle {
reverse_proxy localhost:7880 {
header_up Connection "upgrade"
header_up Upgrade {http.request.header.Upgrade}
}
}
'';
};
};
};
# LiveKit JWT service
services.lk-jwt-service = {
enable = true;
port = 8080;
livekitUrl = "wss://rtc.wyattjmiller.com";
keyFile = livekitKeyFile;
};
# Generate LiveKit key if it doesn't exist
systemd.services = {
matrix-registration-token-gen = {
before = [ "tuwunel.service" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ coreutils openssl ];
script = ''
set -eu
if [ -f "${matrixRegistrationTokenFile}" ]; then
exit 0
fi
install -d -m 0700 "$(dirname "${matrixRegistrationTokenFile}")"
TOKEN="$(openssl rand -hex 32)"
umask 077
printf '%s\n' "$TOKEN" > "${matrixRegistrationTokenFile}"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
livekit-key-gen = {
before = [ "lk-jwt-service.service" "livekit.service" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ coreutils openssl ];
script = ''
set -eu
if [ -f "${livekitKeyFile}" ]; then
exit 0
fi
install -d -m 0700 "$(dirname "${livekitKeyFile}")"
API_KEY="$(openssl rand -hex 8)"
API_SECRET="$(openssl rand -hex 32)"
umask 077
printf '%s: %s\n' "$API_KEY" "$API_SECRET" > "${livekitKeyFile}"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
};
system.stateVersion = "25.11";
}

View File

@@ -0,0 +1,6 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}

View File

@@ -0,0 +1,35 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
boot.kernelParams = [ "console=ttyS0,19200n8" ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
boot.loader.grub.extraConfig = ''
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1;
terminal_input serial;
terminal_output serial;
'';
boot.loader.grub.forceInstall = true;
# boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev";
boot.loader.timeout = 10;
fileSystems."/" =
{ device = "/dev/sda";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/sdb"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@@ -5,7 +5,7 @@
}: }:
with lib; { with lib; {
options = { options = {
security.sudo = { security.sudoers = {
needsPassword = mkOption { needsPassword = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;

View File

@@ -0,0 +1,33 @@
# Must be paired with the pipewire Nix module, this does nothing but install packages
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.sound.hardware.focusrite;
in {
options.sound.hardware.focusrite = {
enable = mkEnableOption "Focusrite audio interface support";
guiSupport = mkOption {
type = types.bool;
default = false;
description = "Enable GUI support for Focusrite Scarlett audio interface (installs alsa-scarlett-gui)";
};
};
config = mkIf cfg.enable (mkMerge [
{
environment.systemPackages = with pkgs;
[
scarlett2
alsa-scarlett-gui
]
++ (
if cfg.guiSupport
then [pkgs.alsa-scarlett-gui]
else []
);
}
]);
}

View File

@@ -1,6 +1,11 @@
{...}: { # TODO: refactor into module
{ pkgs, ...}: {
services.pipewire = { services.pipewire = {
enable = true; enable = true;
pulse.enable = true; pulse.enable = true;
}; };
environment.systemPackages = with pkgs; [
helvum
];
} }

View File

@@ -1,7 +1,16 @@
{pkgs, ...}: { { lib, pkgs, userName, ...}: {
services.shairport-sync = { services.shairport-sync = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
openFirewall = pkgs.stdenv.isLinux; openFirewall = pkgs.stdenv.isLinux;
arguments = "-v -o pw"; # arguments = "-v -o pa";
};
systemd.services.shairport-sync = {
serviceConfig = {
User = lib.mkForce "${userName}";
};
environment = {
XDG_RUNTIME_DIR = "/run/user/1000";
};
}; };
} }

View File

@@ -1,4 +1,10 @@
{...}: { { pkgs, ... }: {
virtualisation.libvirtd.enable = true; virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
services.qemuGuest.enable = true;
services.spice-vdagentd.enable = true;
environment.systemPackages = with pkgs; [
qemu
quickemu
];
} }