1

Compare commits

...

315 Commits

Author SHA1 Message Date
503d57c95e Remove deprecated services 2026-06-17 19:25:57 +02:00
a9745bfa14 Modules/Impermanence: Persist some caches + lmstudio models 2026-06-17 13:56:50 +02:00
efee0d3e1c Home/Nixinator: Update opencode permissions 2026-06-17 13:56:41 +02:00
3f5dd1a686 Modules/Packages: Add lmstudio 2026-06-14 21:01:24 +02:00
87a9d1f5ae Modules/Neovim: Disable opencode diff popup tab 2026-06-14 21:01:18 +02:00
cade967fb0 Home/Nixinator: Configure opencode lsps + formatters 2026-06-14 21:01:02 +02:00
da0c4e9afe Modules/Neovim: Configure opencode-nvim 2026-06-13 17:53:45 +02:00
dc756c70b2 Home/Nixinator: Configure opencode 2026-06-13 15:55:39 +02:00
eea61457ad Modules/Neovim: Fix lua module/plugin path name mismatch 2026-06-13 14:42:10 +02:00
18554a5c5d Modules/Impermanence: Persist ~/.npm 2026-06-13 14:30:05 +02:00
1b5a94c86c System/Nixinator: Update kmscon config after flake update 2026-06-13 14:29:56 +02:00
4fb3ec33ea Flake: Update lock 2026-06-13 14:29:45 +02:00
5b0949deed Modules/Impermanence: Persist opencode state 2026-06-13 13:35:17 +02:00
40634b0a40 Home/Nixinator: Add opencode 2026-06-13 13:34:07 +02:00
80c10b6229 Home/Nixinator: Add shadcn mcp server 2026-06-12 20:57:20 +02:00
b1d677ed78 Modules/Neovim: Add R packages 2026-06-12 20:57:10 +02:00
3dd314b1ee Services/FileflowsNode: Update to v26.06 2026-06-12 20:57:00 +02:00
f08c8c99ad Services/Fileflows: Update to v26.06 2026-06-12 20:45:42 +02:00
296c84e5eb Modules/Zed: Fix nix formatting 2026-06-06 19:25:08 +02:00
3aa5216310 Services/Teamspeak: Update to v6.0.0-beta10 2026-06-06 01:45:11 +02:00
6894d6e6af System/Servenix: Downgrade nvidia drivers to legacy_580 for GTX1070 2026-06-06 01:40:30 +02:00
29d1ddc672 Modules/Yazi: Fix xdg-open as default 2026-06-05 20:47:02 +02:00
0773fd4ffd Modules/Yazi: Update for new HM update 2026-06-05 12:37:31 +02:00
d1808b93af Modules/Zed: Update extensions 2026-06-05 12:37:04 +02:00
9f01c4ecf1 Modules/VSCode: Add claude extension 2026-06-05 12:36:47 +02:00
8e401947eb Modules/SSH: Update for new HM update 2026-06-05 12:36:39 +02:00
de50a5975a Modules/Niri: Reformat 2026-06-05 12:36:25 +02:00
aefec1a3a1 Modules/Neovim: Add additional dependencies 2026-06-05 12:36:15 +02:00
2b04e3c253 Flake: Remove nixvim.inputs.nixpkgs.follows 2026-06-05 12:36:06 +02:00
bf9d625581 Flake: Update lock 2026-06-05 12:35:51 +02:00
98b9eb4340 Services/Comfyui: Update to v0.24.0 2026-06-05 12:35:31 +02:00
d63df5ae9d System/Nixinator: Switch to nvidia stable 2026-06-05 12:34:55 +02:00
cd0d2c6d0a Home/Nixinator: Enable nixos mcp server 2026-06-05 12:33:43 +02:00
ffa7ccf9b3 Services/Kiwix: Move .zim files to ~/ssd/kiwix 2026-06-05 12:32:59 +02:00
c88de7f26d Modules/Zed: Configure nix lsp + formatting 2026-05-27 16:19:52 +02:00
0a295e56df Modules/Impermanence: Persist claude code state 2026-05-27 16:19:43 +02:00
8a2c7ed678 Home/Nixinator: Enable sveltejs mcp server 2026-05-27 16:19:25 +02:00
dc91fd6428 Modules/Zed: Update settings + add csv/cmake extensions 2026-05-19 21:19:28 +02:00
1bbd9b6bbe Home/Nixinator: Enable claude-code 2026-05-19 21:18:56 +02:00
4e1cf920ee Modules/Neovim: Add nil language server 2026-05-17 14:48:07 +02:00
aaefea1987 Home/Nixinator: Enable mcp 2026-05-17 14:47:59 +02:00
1d29a86ddc Modules/Zed: Enable ai features 2026-05-17 14:47:59 +02:00
fb85102582 Modules/VsCode: Enable ai features 2026-05-17 14:47:59 +02:00
c4259ab0f5 Modules/Impermanence: Persist vscode + zed state 2026-05-13 14:39:14 +02:00
59d1f84c7a Modules/Beets: Update fetchart sources config 2026-05-13 14:39:05 +02:00
08b1c358e3 Modules/VSCode: Disable ai features 2026-05-13 14:38:56 +02:00
1899f6baa8 Modules/Zed: Init zed-editor module 2026-05-13 14:38:42 +02:00
a5778ea445 Modules/VSCode: Update + undeprecate 2026-05-13 14:18:07 +02:00
81457e71a3 Derivations/Tiddl: Update to v3.4.3 2026-05-12 20:51:46 +02:00
c5cafdb5fb Modules/Rmpc: Update config to v0.11.0 format 2026-05-12 12:58:57 +02:00
5f6c023f44 Modules/Firefox: Update configPath to old location in ~/ 2026-05-12 12:58:45 +02:00
be261a4de5 Modules/Packages: Add lldb 2026-05-12 12:58:32 +02:00
e6cfe48e5d System/Nixinator: Switch to nvidia beta driver after issues 2026-05-12 12:58:24 +02:00
bbf4dd74d2 System/Nixinator: Update comfy config 2026-05-12 12:58:14 +02:00
fe70449e97 Lib/Nixos: Increase nix download buffer size 2026-05-10 22:40:35 +02:00
2d51aab59e Flake: Disable direnv-instant input 2026-05-09 12:03:17 +02:00
82be0d8d39 Modules/Neovim: Add perlnavigator lsp in addition to PLS 2026-05-07 16:08:54 +02:00
6c28e38e0b Modules/Fish: Enable vi keybindings 2026-05-06 21:06:31 +02:00
be1c65bc5d Modules/Kitty: Enable cursor_trail 2026-05-06 21:06:20 +02:00
7c5d88f63a Modules/Packages: Disable cine 2026-05-01 11:58:54 +02:00
637281e1d0 System/Nixtop: Disable deprecated modules 2026-05-01 11:56:49 +02:00
ce971bb732 Modules/Firefox: Set configPath after update 2026-05-01 11:56:38 +02:00
1c149332d6 Modules/Niri: Replace swww with awww after update 2026-05-01 11:56:31 +02:00
c14a6c852c Flake: Update lock 2026-05-01 11:55:40 +02:00
9eee68e2a5 Modules/Impermanence: Persist tableplus and binaryninja state 2026-04-30 09:15:03 +02:00
1c62518304 Modules/Packages: Add binaryninja and tableplus 2026-04-30 09:14:43 +02:00
06f6488224 Modules/Niri: Add factorio window rule 2026-04-27 23:46:24 +02:00
77bcef2d50 Modules/Neovim: Add ggalluvial R package 2026-04-27 23:46:06 +02:00
d2a5fc6794 Config/Navi: Update ffmpeg cheats 2026-04-27 23:45:06 +02:00
2ded742916 Modules/Niri: Update window rules (fix obsidian match, neovide focus) 2026-04-21 10:17:52 +02:00
304f4f0b41 Modules/Neovim: Add TextCSV_XS perl plugin 2026-04-21 10:17:38 +02:00
5622ddbcfb Modules/Fish: Add mechanism to load/unload fish environment shells with direnv 2026-04-20 11:27:18 +02:00
bfe57e7028 Modules/Packages: Remove disktui from nix-darwin 2026-04-20 09:22:12 +02:00
32c7c9fbe0 Modules/Neovim: Configure perl lsp/formatter + R lsp/formatter 2026-04-19 22:51:07 +02:00
cc5a687353 Services/Nfty: Bind port for VPS 2026-04-17 14:21:21 +02:00
10ceedca05 Modules/Sops: Add ntfy secrets 2026-04-17 14:17:45 +02:00
92918c6e7c Services/Nfty: Init at v2.21 2026-04-17 14:17:19 +02:00
8488134867 Modules/Neovim: Enable perl-language-server (PLS) and PerlTidy 2026-04-17 13:37:55 +02:00
26551d4465 Modules/Niri: Configure default floating window sizes for eyedropper + junction 2026-04-17 12:46:00 +02:00
4954e69353 Modules/Yazi: Add junction hotkey 2026-04-17 12:45:46 +02:00
73b84c49ae Modules/Packages: Add junction (app chooser) 2026-04-17 12:45:38 +02:00
4b43067cf8 System: Disable documentation 2026-04-17 12:45:12 +02:00
dc53669636 System: Move cachix configuration to mkCommonNixSettings library function 2026-04-17 12:44:58 +02:00
8ca69b50e4 Home/Nixinator: Add onlyoffice (flatpak) 2026-04-17 12:44:17 +02:00
5473b47b7f Config/Obsidian: Add !important to snippets 2026-04-15 01:28:40 +02:00
f9baae061a Config/Obsidian: Add image borders snippet 2026-04-15 00:23:34 +02:00
aa42d0e283 Config/Obsidian: Add justify text snippet 2026-04-15 00:19:31 +02:00
e88199483e Modules/Packages: Add eyedropper 2026-04-15 00:19:21 +02:00
790f14fedf Config/Obsidian: Add fullwidth images snippet 2026-04-15 00:10:20 +02:00
52084d1ada Modules/Packages: Add cine mpv frontend 2026-04-14 11:06:04 +02:00
4a7ee425b3 Services/Comfyui: Disable service 2026-04-14 11:05:49 +02:00
fa1b204b38 Add wallpapers 2026-04-10 17:31:15 +02:00
b72288a216 System/Nixinator: Don't configure swapfile in disko 2026-04-10 17:31:03 +02:00
7856a08b9b Modules/Packages: Add disktui 2026-04-10 17:30:46 +02:00
a935a63de0 Modules/Niri: Open zotero on workspace 3 instead of 2 2026-04-10 17:30:38 +02:00
69f4b791f4 Modules/Packages: Add texlive to darwinix 2026-04-04 10:51:44 +02:00
f59f8ca4ae Modules/Impermanence: Persist jellyfin-tui state 2026-04-02 19:58:47 +02:00
e132544548 Services/TeamSpeak: Update to v6.0.0-beta8 2026-04-02 19:56:30 +02:00
502f1ffd82 Modules/Firefox: Update f12 bookmarks 2026-04-02 19:55:48 +02:00
a1a0c23ecd Modules/Packages: Install masssprings on all !headless devices 2026-03-28 11:43:18 +01:00
6194629c81 Home/Nixinator: Add gnome-boxes 2026-03-27 17:58:54 +01:00
6c608842c4 System/Nixinator: Configure libvirt virtualisation 2026-03-27 16:54:56 +01:00
4c11df5817 Modules/Niri: Update global menu 2026-03-27 11:20:55 +01:00
e00f5868b9 Modules/SSH: Add keys to ssh-agent on nix-darwin 2026-03-27 01:31:21 +01:00
67e3ab081b Modules/Niri: Update walker menus using new mkMenu lib function 2026-03-27 01:18:26 +01:00
6027779453 Lib/Rofi: Replace mkSimpleMenu with multi-layer-menu capable mkMenu 2026-03-27 01:18:02 +01:00
a7140ce078 Modules/Impermanence: Remove dms mount 2026-03-27 00:25:45 +01:00
95f0ffa65c Modules/JellyfinTUI: Set jellyfin url depending on system (nixos/darwin) 2026-03-26 21:43:41 +01:00
f3e5daf08a Modules/JellyfinTUI: Generate config in path depending on system (nixos/darwin) 2026-03-26 21:35:53 +01:00
c43f8b136d Modules/Sops: Don't hardcode age keyFile path 2026-03-26 21:24:28 +01:00
57ee699302 Modules/JellyfinTUI: Reference nixos/darwin config depending on system 2026-03-26 21:13:04 +01:00
7aa4dc4980 System/Darwinix: Set sops bootSecrets 2026-03-26 21:03:21 +01:00
9a7a27c013 Flake: Import sops module on nix-darwin 2026-03-26 21:02:11 +01:00
daa9d28624 Modules/Sops: Update secret definitions for nix-darwin 2026-03-26 21:00:38 +01:00
c765e92f17 Lib/Nixos: Import compatible systemmodules into darwin system 2026-03-26 20:49:50 +01:00
ace7e30343 System/Darwinix: Import sops secrets 2026-03-26 20:46:38 +01:00
758b2ac5b5 Modules/JellyfinTUI: Include + enable module, disable impermanence 2026-03-26 20:46:30 +01:00
90a1016523 Config/Navi: Update sops secrets file path 2026-03-26 20:45:44 +01:00
fff0781acb Modules/JellyfinTUI: Init module 2026-03-26 20:38:36 +01:00
08fa1e47ab System/Nixinator: Enable linux_zen 2026-03-26 20:15:12 +01:00
58e6e31e0f Modules/Packages: Update protonvpn-gui package name 2026-03-26 20:15:03 +01:00
5b6d9ef004 Modules/Niri: Update gtk config after HM update 2026-03-26 20:14:47 +01:00
c55b6b7fa3 Flake: Update lock 2026-03-26 15:22:55 +01:00
655cfbfc1e Modules/Packages: Add ttyper, bandwhich, snitch 2026-03-26 15:21:25 +01:00
8e35d7ce1a Home: Extract common nixos/darwin packages/programs/module-configs into terminal+packages modules 2026-03-24 11:58:45 +01:00
74ab6d8785 System: Use lib.networking to configure static networks 2026-03-24 11:32:11 +01:00
102447bbd4 Lib/Networking: Add option to configure route-less addresses 2026-03-24 11:31:56 +01:00
d0f3211664 System: Use common nix configuration 2026-03-24 11:30:38 +01:00
d86c746644 Lib/Nixos: Add common nix configuration 2026-03-24 11:30:22 +01:00
d5e8fd25d8 Services: Use common dockerhub login 2026-03-24 11:29:21 +01:00
2400d2074e Lib/Containers: Add common dockerhub login 2026-03-24 11:27:22 +01:00
f4fa9ecd06 Modules/Neovim: Add devdocs integration plugin 2026-03-24 10:38:34 +01:00
b04d6dd036 System/Darwinix: Add signal cask 2026-03-23 13:56:54 +01:00
3e7c52e526 Home/Darwinix: Add speedtest-cli 2026-03-23 13:42:23 +01:00
c594bc5c10 Home: Add speedtest-cli 2026-03-23 13:42:00 +01:00
b8bebf1ff3 Services/Comfyui: Update launch args 2026-03-23 13:06:43 +01:00
17247f0aaf System/Darwinix: Add casks (obsidian, discord, ...) 2026-03-23 13:02:46 +01:00
333b1863ca Services/Comfyui: Update image + launch args 2026-03-23 11:19:43 +01:00
53b8e1cf0e Modules/Waybar: Update widget intervals 2026-03-23 11:19:34 +01:00
818f6b4059 Modules/Fish: Update abbrs 2026-03-23 11:19:17 +01:00
ab734d9e97 Services/ComfyUI: Open port 2026-03-23 10:37:29 +01:00
a4ffea27b2 System/Darwinix: Move sketchybar to correct location 2026-03-23 00:34:34 +01:00
773ffe1c06 Modules/Fish: Update abbrs for nix-darwin 2026-03-23 00:24:11 +01:00
57e6c1528b Home/Darwinix: Enable sketchybar 2026-03-23 00:21:19 +01:00
5eb1aeace2 Modules/Waybar: Update workspace widget colors (empty/occupied/active/urgent) 2026-03-23 00:20:59 +01:00
c4e53d0a75 Modules/Waybar: Update warning colors 2026-03-22 23:24:19 +01:00
bb5420b3b3 Modules/Waybar: Disable systemd-failed-units widget 2026-03-22 23:15:48 +01:00
19fa6802e6 Home: Move bat/cava/fastfetch/ssh/tmux configs to modules + deduplicate nix-darwin home config 2026-03-22 23:03:19 +01:00
14a3037578 System/Darwinix: Update trackpad/keyboard config 2026-03-22 22:43:08 +01:00
f30a7ffb67 Home: Update nixinator ssh config 2026-03-22 22:42:28 +01:00
2c43950c77 Add nix-darwin screenshot 2026-03-21 16:19:47 +01:00
273ad50629 Modules/Fish: Add nix-darwin homebrew environment setup 2026-03-21 15:50:27 +01:00
7d950369f2 System/Darwinix: Set known network services 2026-03-21 15:41:48 +01:00
1aa38a5c3e Home/Darwinix: Set environment variables 2026-03-21 15:40:36 +01:00
634994ed0e System/Darwinix: System settings 2026-03-21 15:39:01 +01:00
03adf4e344 Home/Darwinix: Remove non-available packages 2026-03-21 15:03:34 +01:00
ab6a6f872b System/Darwinix: Add fonts 2026-03-21 15:00:32 +01:00
895539f078 Modules/Neovim: Don't hardcode home directory 2026-03-21 14:46:11 +01:00
0ef8c8b46c Home/Darwinix: Disable keychain 2026-03-21 14:34:13 +01:00
8b61028dbe Modules/Fish: Add darwin rebuild abbr 2026-03-21 14:34:06 +01:00
4dbc42fc1f Home/Darwinix: Add programs 2026-03-21 14:18:23 +01:00
72cb5ff553 Modules/Fish: Update for nix-darwin 2026-03-21 14:18:10 +01:00
f8a8ea4ead Home/Darwinix: Add packages 2026-03-21 14:06:55 +01:00
410215749f Modules/Neovim: Update for nix-darwin 2026-03-21 14:01:01 +01:00
eacdba9a45 Modules/Kitty: Update for nix-darwin 2026-03-21 13:56:24 +01:00
ad35a92e44 Modules/Fish: Update for nix-darwin 2026-03-21 13:44:12 +01:00
c63cff0ea3 Initialize nix-darwin config for darwinix 2026-03-21 13:28:25 +01:00
8944b032ca Home: Disable rofi 2026-03-21 11:49:04 +01:00
8bc1b4a76c Update screenshots 2026-03-21 11:22:51 +01:00
61201dde9c Modules/Niri: Enable dunst 2026-03-21 11:21:02 +01:00
b7f77597b0 Modules/Niri: Use waypaper with swww backend instead of swaybg 2026-03-21 10:59:19 +01:00
4d2315766d Modules/Niri: Add wallpaper switcher keybindings 2026-03-21 01:45:07 +01:00
5d40d4f707 Add wallpapers 2026-03-21 01:41:42 +01:00
822b111712 Modules/Niri: Set wallpaper 2026-03-20 22:58:05 +01:00
10fa21e69e Modules/Niri: Add session command menu 2026-03-20 22:47:08 +01:00
c54f69ac77 Lib/Rofi: Allow supplying a dmenu command for mkSimpleMenu 2026-03-20 22:46:58 +01:00
127b1acb7a Modules/Niri: Theme walker 2026-03-20 22:24:00 +01:00
4c2a60e60a Modules/Waybar: Update module configurations 2026-03-20 21:41:02 +01:00
1092ac0bfb Modules/Waybar: Make option accept list of outputs instead of single 2026-03-20 20:00:12 +01:00
dd3b4a60cd Modules/Niri: Replace kde polkit agent with gnome's + fix waybar rounded corner clipping 2026-03-20 19:52:35 +01:00
3ec140ba67 Modules/Waybar: Align waybar with current colorscheme 2026-03-20 19:51:18 +01:00
915d58859b Modules/Neovim: Add tombi toml formatter 2026-03-20 19:50:44 +01:00
915b1939c1 Modules/Niri: Disable DMS (slow af) 2026-03-20 19:25:28 +01:00
c29dc43ad7 Modules/Firefox: Fix search engine typo 2026-03-20 17:10:53 +01:00
90d5600f28 Modules/Niri: Update gtk theme + fix flatpak themes 2026-03-20 17:10:43 +01:00
e28d453194 Modules/Hyprland: Deprecate hyprland module 2026-03-20 14:08:51 +01:00
16bf1a8480 Modules/Fish: Update abbrs 2026-03-20 10:32:12 +01:00
40c40f9fca Home: Add exiftool 2026-03-20 09:35:06 +01:00
8a81f95b92 Modules/Niri: Update gtk theme 2026-03-19 23:57:52 +01:00
7e15b675b3 Services/ComfyUI: Update root directory 2026-03-19 23:57:43 +01:00
3153059801 System/Nixinator: Add two additional disks to system (disko, luks) 2026-03-19 23:57:32 +01:00
02d1e4d434 Home/Nixinator: Add hytale + steam 2026-03-19 23:57:05 +01:00
17f832c8f2 Services/ComfyUI: Init at v2026-03-16 2026-03-19 17:43:22 +01:00
0cb00937f0 Services/FileFlows: Don't autostart nixinator node 2026-03-19 17:37:19 +01:00
ccee2b0cad Home: Remove old ollama config 2026-03-19 17:32:15 +01:00
5967767e8c Home: Add mars database port forward 2026-03-19 10:29:55 +01:00
9476507c32 Home/Nixinator: Use ghidra option instead of package 2026-03-19 10:29:43 +01:00
a83045696b Modules/Firefox: Update search engines 2026-03-17 18:16:41 +01:00
752a26bf84 Modules/Firefox: Update HM Search bookmark url 2026-03-17 18:16:34 +01:00
c83f81e257 Home: Add resultbrowser ssh port forward to mars host 2026-03-17 18:16:21 +01:00
e13db3d09a Modules/Impermanence: Persist ghidra config 2026-03-13 01:10:04 +01:00
b1a3fda37b System/Nixinator: Disable restic backup service (broken) 2026-03-13 00:55:35 +01:00
2ba67bd6f9 Home/Nixinator: Add ghidra 2026-03-13 00:47:33 +01:00
251e40562b System/Nixinator: Open FAIL* port 1111 2026-03-12 20:25:54 +01:00
24b9205af3 Modules/Neovim: Don't use cursive script front in neovide 2026-03-12 20:25:44 +01:00
c88b598bae Flake: Update lock 2026-03-12 20:25:25 +01:00
d294cae787 Modules/Neovim: Fix just-lsp configuration 2026-03-12 09:31:01 +01:00
1c74ab1bf9 Modules/Neovim: Fix persisted mappings 2026-03-12 09:28:26 +01:00
41f464cc77 Home: Add wl-clipboard 2026-03-11 21:05:29 +01:00
93740a4216 Config/Flake: Update flake template 2026-03-11 21:05:21 +01:00
f3e87369cf Services/Fileflows: Update to v26.01 2026-03-11 12:30:56 +01:00
d8de5d1ba8 Modules/Impermanence: Persist man cache 2026-03-09 22:48:36 +01:00
ddfeae3de5 Home: Add binsider/jujutsu/lurk/radare2 2026-03-09 21:42:09 +01:00
9244b599ad System: Rename man cache option 2026-03-09 12:16:37 +01:00
7c9c30238d Home/Nixtop: Replace light with brightnessctl 2026-03-09 12:16:27 +01:00
88607b6b23 Home: Replace helvum with crosspipe 2026-03-09 12:16:04 +01:00
e1e07558df Home/Nixtop: Replace light with brightnessctl 2026-03-09 12:15:56 +01:00
f654d4379b Derivations/Tiddl: Add typer typing-extensions build input 2026-03-09 12:15:45 +01:00
7c09c8a053 Flake: Update lock 2026-03-09 12:15:23 +01:00
244d3a48c0 Home: Update CLion EAP version + masssprings version 2026-03-06 22:15:09 +01:00
5d1ef1f4f6 Home: Add masssprings 2026-03-05 10:28:56 +01:00
0440b8b6cc Home: Pregenerate keepassxc session config 2026-03-05 10:28:26 +01:00
b14bd2758d Overlays: Upgrade clion to 2026.1-EAP 2026-03-01 22:37:01 +01:00
68b0f800da Modules/Fish: Add nix run abbr 2026-03-01 22:36:50 +01:00
e049644ea6 Modules/Neovim: Update clangd launch arguments 2026-02-28 18:33:37 +01:00
63f704b5a5 Modules/Neovim: Move trouble to bottom 2026-02-28 18:33:27 +01:00
7704a74b24 Modules/Impermanence: Persist jetbrains state 2026-02-28 11:26:20 +01:00
7f80174e22 Home: Add czkawka 2026-02-27 20:10:14 +01:00
ecb496f029 Home/Nixinator: Add clion 2026-02-27 18:34:01 +01:00
1fab5fe65e Config/Flake: Add cross-compilation template 2026-02-27 12:19:31 +01:00
ba9422caa8 Modules/Bootloader: Reduce configuration limit to 3 to fit in 512MB /boot partition 2026-02-27 12:19:21 +01:00
904686c8c2 System/Nixinator: Move to linux stable with nvidia-open 2026-02-26 16:15:19 +01:00
7561cc434e Modules/Niri: Disable DMS startup dialog 2026-02-26 16:14:53 +01:00
abd40375d4 Modules/Niri: Disable autostart of some apps 2026-02-26 00:17:26 +01:00
173e84252e System/Nixinator: Enable 5 LUKS password retries 2026-02-26 00:17:14 +01:00
62f4e58641 System/Nixinator: Switch to vanilla linux kernel (doesn't work with nvidia-open currently) 2026-02-26 00:17:03 +01:00
bf88d845cc Config/Flake: Update after xorg package set deprecation 2026-02-26 00:16:29 +01:00
42b4bf8262 Derivations/UnityHub: Update after xorg package set deprecation 2026-02-26 00:16:18 +01:00
9954fdfde5 Modules/Niri: Disable dsearch 2026-02-23 13:48:30 +01:00
5373df727f Config/Flake: Provide devShells.default instead of devShell 2026-02-22 13:47:44 +01:00
509a6d9c94 Modules/Niri: Add reset-window-height hotkey 2026-02-19 22:47:28 +01:00
edd6556117 Modules/Niri: Update DMS config 2026-02-17 11:45:36 +01:00
9b4a2cbba9 Modules/Niri: Place blurred wallpaper in overview backdrop 2026-02-17 11:45:24 +01:00
328956d225 System/Nixinator: Mark /home as neededForBoot 2026-02-17 11:08:02 +01:00
78ef141012 Modules/Firefox: Disable vdhcoapp 2026-02-17 11:07:54 +01:00
0d7933b5ce Flake: Update lock 2026-02-17 10:53:26 +01:00
ee898f020d Modules/Niri: Enable danksearch 2026-02-17 10:53:26 +01:00
be8a17c5a5 Modules/Neovim: Make clangd-extensions non-lazy 2026-02-17 10:53:26 +01:00
f1b69e1931 System: Harden SSHD and authorize key 2026-02-17 10:53:26 +01:00
3375e9fccb Modules/Niri: Add colorpicker widget to bar 2026-02-17 10:53:26 +01:00
5686c34f8f Services/Formula12: Init 2026-02-17 10:53:26 +01:00
24e7d3dde2 Config/Flake: Update pkgs.hiPrio to lib.hiPrio 2026-02-17 10:53:26 +01:00
670d159d6c Config/Neovim: Add bundler script to generate portable neovim config 2026-02-10 18:11:01 +01:00
259c2afd09 Modules/Impermanence: Persist tiddl config 2026-02-10 14:54:51 +01:00
a60bfe9a1d Modules/Neovim: Add justfile support 2026-02-09 18:55:41 +01:00
90a51abb19 Modules/Neovim: Display whitespace in visual mode 2026-02-09 15:50:46 +01:00
924a4c4a03 Modules/Neovim: Add makefile formatter 2026-02-09 15:50:24 +01:00
3532769a33 Modules/Firefox: Add godbolt bookmark 2026-02-09 14:00:05 +01:00
0e243d6ecb Config/Navi: Add tiddl cheat 2026-02-04 20:23:40 +01:00
644581df4d Derivations/Tiddle: Add tiddl derivation 2026-02-04 20:16:54 +01:00
12f29928ca Services/Kiwix: Init kiwix at v3.8.1 2026-02-03 11:28:16 +01:00
3b6d3b8b7f Services/Immich: Update to v2.5.2 2026-02-03 11:28:00 +01:00
12a5a4252e Services/Nginx: Expose hytale port 2026-01-29 16:33:45 +01:00
72c403e8b1 Modules/Impermanence: Persist jellyfin-tui settings 2026-01-26 13:44:42 +01:00
368168a881 Home: Add jellyfin-tui 2026-01-26 13:44:34 +01:00
ea9560dbd0 Modules/Firefox: Disable darkmode plugin 2026-01-26 13:19:43 +01:00
9bb9482c07 Modules/Neovim: Enable autotools-language-server 2026-01-25 23:01:07 +01:00
2ba5783657 Modules/Impermanence: Persist feishin config 2026-01-25 19:23:15 +01:00
95810cf709 Home: Add feishing 2026-01-25 19:14:11 +01:00
37a04bfd2c Derivations/TidalDL: Fix derivation after original repo got nuked 2026-01-24 19:46:42 +01:00
1555cbd545 System/Nixinator: Enable IPv6 networking 2026-01-24 19:22:11 +01:00
73936cf30c System/ServeNix: Enable IPv6 networking 2026-01-24 02:05:37 +01:00
dfbc7f2af0 System/ThinkNix: Enable IPv6 networking 2026-01-24 01:32:31 +01:00
7f9117769d Modules/Docker: Enable IP forwarding + add IPv6 fallback dns 2026-01-24 01:32:14 +01:00
2ccae9f16d Lib/Networking: Accept router advertisements 2026-01-24 01:31:54 +01:00
298ceacb4d Modules/Neovim: Enable nixd + alejandra also for headless 2026-01-24 01:31:42 +01:00
0b41950416 Home: Add gnumake 2026-01-19 12:07:38 +01:00
323de4a16a Modules/Impermanence: Persist /var/lib/docker 2026-01-18 21:51:44 +01:00
e447483d18 Home/Nixinator: Add zed + vscode 2026-01-18 21:45:47 +01:00
503640e68f Modules/Impermanence: Persist docker build cache, zed config, jellyfin-desktop config 2026-01-18 21:45:36 +01:00
15da05572c Update systemmodules/homemodules paths to allow nixd to differentiate between the two 2026-01-18 15:47:51 +01:00
5e0fbd8b21 System: Rename system/modules to system/systemmodules 2026-01-18 15:34:46 +01:00
be35914344 Home: Rename home/modules to home/homemodules 2026-01-18 15:34:36 +01:00
fc410c6178 System/Nixinator: Reenable restic backup with NFS "hard" 2026-01-18 14:01:30 +01:00
17ca00589a System: Replace NFS mounts "soft" option with "hard" 2026-01-18 14:00:16 +01:00
4c048f451e System/Nixinator: Disable restic until I figure out why the repo breaks all the time 2026-01-18 01:19:19 +01:00
8a97782c5c System/Nixinator: Disable rootless docker 2026-01-18 01:19:04 +01:00
1b9375a241 Modules/Neovim: Update clangd options 2026-01-18 00:01:14 +01:00
2bff91fa1c Modules/Neovim: Update nvim-treesitter config after update 2026-01-17 23:46:34 +01:00
ec99b62cce Modules/Niri: Disable workspace scroll on focus change 2026-01-17 23:46:19 +01:00
d3804d70d6 Modules/Niri: Update DMS configuration after update 2026-01-17 23:00:44 +01:00
ae47573018 Derivations/TidalDL: Disable broken derivation for now 2026-01-17 21:59:22 +01:00
83b63f581c System/Nixinator: Enable 16G swap 2026-01-17 21:58:24 +01:00
d9d81d19ce Derivations/TidalDL: Update src after the original repository was removed (thank you anna) 2026-01-17 20:29:17 +01:00
9d2a0d42e9 System: Fix after update 2026-01-17 20:28:40 +01:00
bb1404aa38 Home: Fix after update 2026-01-17 20:28:34 +01:00
576519a9d7 Flake: Update lock 2026-01-17 20:20:57 +01:00
019767af56 Home/Nixinator: Disable ollama 2026-01-17 20:20:31 +01:00
d3b946096b Modules/Neovim: Rewrite clangd root_dir expression for neovim v0.11 2026-01-17 19:50:05 +01:00
8e07dc56e5 Services/FileFlows: Don't mount MusicVideos into nixinator node 2026-01-17 19:32:45 +01:00
6c6643f01c Modules/Impermanence: Persist user docker images/containers 2026-01-17 19:23:35 +01:00
bb020d4b9a System/Nixinator: Remove GAMES disk mount 2026-01-17 19:23:05 +01:00
930aa2dac7 Home: Rename dankMaterialShell to dank-material-shell after flake update 2026-01-17 19:22:45 +01:00
0f8fa6cd88 Flake: Update lock 2026-01-17 19:22:45 +01:00
d1c98934cb System/Servenix: Mount nfs share for music videos/recorded shows 2026-01-05 18:02:51 +01:00
243e0003bd Services/Box: Update to v0.30.1 2026-01-05 18:02:51 +01:00
2068b8a17d Home: Disable hyprland bc it's too woke 2025-12-26 13:45:40 +01:00
172d4bb3c4 Home: Enable hyprland + niri depending on their system module state 2025-12-26 13:07:07 +01:00
74408ee5ea Modules/Niri: Update DMS default config 2025-12-14 17:16:16 +01:00
0e86f4aaab Home: Disable hyprland 2025-12-14 16:14:14 +01:00
69f814d52e Modules/Hyprland: Update to current config format 2025-12-14 16:14:07 +01:00
4cc975f756 System/Nixinator: Switch to Nvidia beta driver since stable is currently broken on kernel 6.18 2025-12-12 19:52:06 +01:00
65de8f1df4 Flake: Update lock 2025-12-12 19:52:06 +01:00
20095ff676 Modules/Niri: Init DankMaterialShell config 2025-12-12 19:52:06 +01:00
9155652776 Services/Box: Init at v0.29.3 2025-12-09 03:26:30 +01:00
263 changed files with 8318 additions and 4094 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ config/neovim/store
home/modules/ags/config/types
home/modules/ags/config/tsconfig.json
system/modules/agenix/secrets.nix
config/neovim/nvim_bundle

BIN
Btop.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

BIN
Darwin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

BIN
Niri.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 KiB

View File

@ -1,16 +1,9 @@
# NixOS Configuration
Modular NixOS configuration, using Hyprland (yikes) or Niri for a tiling/scrolling desktop.
Modular NixOS configuration, using [Niri](https://github.com/niri-wm/niri) and [Waybar](https://github.com/Alexays/Waybar) for a light desktop.
![](FastFetch.png)
<p float="left" align="middle">
<img src="/NeoVim.png" width="33%" />
<img src="/Rmpc.png" width="33%" />
<img src="/Btop.png" width="33%" />
</p>
![](Niri.png)
![](Darwin.png)
To install, run `nixos-rebuild` with the `--flake` parameter from the `NixFlake` directory: `nixos-rebuild switch --flake .#nixinator`.
Alternatively, use `nh os switch` or `nh os boot`.
@ -21,7 +14,7 @@ Contains all the system configurations.
- There is a common configuration used for all systems: `NixFlake/system/default.nix`
- Every system has its own special configuration: `NixFlake/system/<hostname>/default.nix`
- System modules are located in `NixFlake/system/modules`
- System modules are located in `NixFlake/system/systemmodules`
- Hosted services are located in `NixFlake/system/services`
When creating a NixOS configuration inside the `NixFlake/flake.nix` the common configuration is imported.
@ -33,7 +26,7 @@ Contains all the home-manager configurations.
- There is a common configuration for each user: `NixFlake/home/<username>/default.nix`
- There is a configuration for a single system of this user: `NixFlake/home/<username>/<hostname>/default.nix`
- Home-Manager modules are located in `NixFlake/home/modules`
- Home-Manager modules are located in `NixFlake/home/homemodules`
When creating a NixOS configuration inside the `NixFlake/flake.nix` the common configuration is imported.
Because the hostname is propagated to the common configuration, it can import the host-specific config by itself.

BIN
Rmpc.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

View File

@ -21,6 +21,9 @@ rec {
}:
# Create a shell (and possibly package) for each possible system, not only x86_64-linux
flake-utils.lib.eachDefaultSystem (system: let
# =========================================================================================
# Define pkgs/stdenvs
# =========================================================================================
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
@ -28,8 +31,140 @@ rec {
rust-overlay.overlays.default
];
};
# clangPkgs = import nixpkgs {
# inherit system;
# config.allowUnfree = true;
# overlays = [];
#
# # Use this to change the compiler:
# # - GCC: pkgs.stdenv
# # - Clang: pkgs.clangStdenv
# # NixOS packages are built using GCC by default. Using clang requires a full rebuild/redownload.
# config.replaceStdenv = {pkgs}: pkgs.clangStdenv;
# };
# Package set for cross-compilation
# windowsPkgs = import nixpkgs {
# inherit system;
# crossSystem = {
# config = "x86_64-w64-mingw32";
# };
# config.allowUnfree = true;
# };
inherit (pkgs) lib stdenv;
# =========================================================================================
# Define shell environment
# =========================================================================================
# Setup the shell when entering the "nix develop" environment (bash script).
shellHook = let
mkCmakeScript = type: let
typeLower = lib.toLower type;
in
pkgs.writers.writeFish "cmake-${typeLower}.fish" ''
cd $FLAKE_PROJECT_ROOT
echo "Removing build directory ./cmake-build-${typeLower}/"
rm -rf ./cmake-build-${typeLower}
echo "Creating build directory"
mkdir cmake-build-${typeLower}
cd cmake-build-${typeLower}
echo "Running cmake"
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="${type}" -DCMAKE_EXPORT_COMPILE_COMMANDS="On" ..
echo "Linking compile_commands.json"
cd ..
ln -sf ./cmake-build-${typeLower}/compile_commands.json ./compile_commands.json
'';
cmakeDebug = mkCmakeScript "Debug";
cmakeRelease = mkCmakeScript "Release";
mkBuildScript = type: let
typeLower = lib.toLower type;
in
pkgs.writers.writeFish "cmake-build.fish" ''
cd $FLAKE_PROJECT_ROOT/cmake-build-${typeLower}
echo "Running cmake"
cmake --build .
'';
buildDebug = mkBuildScript "Debug";
buildRelease = mkBuildScript "Release";
# Add project-local fish abbrs here
abbrs = {
# Rust Bevy:
# build-release-windows = "CARGO_FEATURE_PURE=1 cargo xwin build --release --target x86_64-pc-windows-msvc";
# C/C++:
# cmake-debug = "${cmakeDebug}";
# cmake-release = "${cmakeRelease}";
# build-debug = "${buildDebug}";
# build-release = "${buildRelease}";
# Clojure:
# clojure-deps = "deps-lock --lein";
# Python:
# run = "python ./app/main.py";
# profile = "py-spy record -o profile.svg -- python ./app/main.py && firefox profile.svg";
# ptop = "py-spy top -- python ./app/main.py";
};
eraseAbbr = name: value: ''abbr --erase ${name} 2>/dev/null'';
createAbbr = name: value: ''abbr -a ${name} "${value}"'';
# This will be sourced by the global fish config if INIT_PROJECT_SHELL gets unset
unloadProjectShell = pkgs.writers.writeFish "unload-shell.fish" ''
echo "Unloading \"${description}\" environment..."
${builtins.concatStringsSep "\n" (lib.mapAttrsToList eraseAbbr abbrs)}
'';
# This will be sourced by the global fish config if INIT_PROJECT_SHELL gets set
initProjectShell = pkgs.writers.writeFish "init-shell.fish" ''
# Unload just in case, to not have redefinition errors
source ${unloadProjectShell}
echo "Sourcing \"${description}\" environment..."
${builtins.concatStringsSep "\n" (lib.mapAttrsToList createAbbr abbrs)}
'';
in
builtins.concatStringsSep "\n" [
# Launch into pure fish shell
''
# Determine the project root, used e.g. in cmake scripts
export FLAKE_PROJECT_ROOT="$(git rev-parse --show-toplevel)"
# Can't do the "exec" with nix-direnv
# - The "exec fish" would call direnv again => Infinite loop
# - The shellHook is Bash/POSIX, so fish syntax doesn't work
# Use this for "nix develop" without direnv
# exec "$(type -p fish)" -C "source ${initProjectShell} && abbr -a menu '${pkgs.bat}/bin/bat "${initProjectShell}"'"
# Use this for direnv without "nix develop"
export INIT_PROJECT_SHELL="${initProjectShell}"
export UNLOAD_PROJECT_SHELL="${unloadProjectShell}"
''
# Qt: Launch into wrapped fish shell (direnv incompatible)
# https://nixos.org/manual/nixpkgs/stable/#sec-language-qt
# ''
# fishdir=$(mktemp -d)
# makeWrapper "$(type -p fish)" "$fishdir/fish" "''${qtWrapperArgs[@]}"
# exec "$fishdir/fish" -C "source ${initProjectShell} && abbr -a menu '${pkgs.bat}/bin/bat "${initProjectShell}"'"
# ''
];
# ===========================================================================================
# Define custom dependencies
# ===========================================================================================
@ -68,7 +203,7 @@ rec {
# bintools = pkgs.bintools.bintools; # Unwrapped bintools
# libc = pkgs.glibc;
# };
# gcc = pkgs.hiPrio (pkgs.wrapCCWith {
# gcc = lib.hiPrio (pkgs.wrapCCWith {
# cc = pkgs.gcc.cc; # Unwrapped gcc
# libc = pkgs.glibc;
# bintools = bintools;
@ -84,7 +219,7 @@ rec {
# bintools = pkgs.bintools.bintools; # Unwrapped bintools
# libc = pkgs.glibc_multi;
# };
# gcc_multilib = pkgs.hiPrio (pkgs.wrapCCWith {
# gcc_multilib = lib.hiPrio (pkgs.wrapCCWith {
# cc = pkgs.gcc.cc; # Unwrapped gcc
# libc = pkgs.glibc_multi;
# bintools = bintools_multilib;
@ -119,11 +254,15 @@ rec {
# jdk
# C/C++:
# pkg-config
# cmake
# gnumake
# ninja
# gdb
# valgrind
# gnumake
# cmake
# pkg-config
# kdePackages.kcachegrind
# perf
# hotspot
# Clojure:
# leiningen
@ -147,6 +286,8 @@ rec {
# C/C++:
# boost
# sfml
# raylib
# backward-cpp
# Qt:
# qt6.qtbase
@ -162,8 +303,38 @@ rec {
# src = ./.;
#
# installPhase = ''
# runHook preInstall
#
# mkdir -p $out/bin
# mv ./BINARY $out/bin
# cp -rv ./${pname} $out/bin/
#
# runHook postInstall
# '';
# };
# windowsPackage = windowsPkgs.stdenv.mkDerivation rec {
# pname = "";
# version = "1.0.0";
# src = ./.;
#
# # nativeBuildInputs must be from the build-platform (not cross)
# # so we use "pkgs" here, not "windowsPkgs"
# nativeBuildInputs = with pkgs; [
# cmake
# ];
#
# buildInputs = with windowsPkgs; [];
#
# cmakeFlags = [
# "-DCMAKE_SYSTEM_NAME=Windows"
# ];
#
# installPhase = ''
# runHook preInstall
#
# mkdir -p $out/bin
# cp ./${pname}.exe $out/bin/
#
# runHook postInstall
# '';
# };
# package = clj-nix.lib.mkCljApp {
@ -185,133 +356,76 @@ rec {
# };
in rec {
# Provide package for "nix build"
# defaultPackage = package;
# defaultApp = flake-utils.lib.mkApp {
# drv = defaultPackage;
# packages = {
# default = package;
# windows = windowsPackage;
# };
# apps = {
# default = flake-utils.lib.mkApp {drv = package;};
# };
# Provide environment for "nix develop"
devShell = pkgs.mkShell {
inherit nativeBuildInputs buildInputs;
name = description;
devShells = {
# Provide default environment for "nix develop".
# Other environments can be added below.
default = pkgs.mkShell {
inherit nativeBuildInputs buildInputs shellHook;
name = description;
# =========================================================================================
# Define environment variables
# =========================================================================================
# =========================================================================================
# Define environment variables
# =========================================================================================
# Rust stdlib source:
# RUST_SRC_PATH = "${rust}/lib/rustlib/src/rust/library";
# Rust stdlib source:
# RUST_SRC_PATH = "${rust}/lib/rustlib/src/rust/library";
# Custom dynamic libraries:
# LD_LIBRARY_PATH = builtins.concatStringsSep ":" [
# # Rust Bevy GUI app:
# # "${pkgs.xorg.libX11}/lib"
# # "${pkgs.xorg.libXcursor}/lib"
# # "${pkgs.xorg.libXrandr}/lib"
# # "${pkgs.xorg.libXi}/lib"
# # "${pkgs.libGL}/lib"
# Custom dynamic libraries:
# LD_LIBRARY_PATH = builtins.concatStringsSep ":" [
# # Rust Bevy GUI app:
# # "${pkgs.libx11}/lib"
# # "${pkgs.libxcursor}/lib"
# # "${pkgs.libxrandr}/lib"
# # "${pkgs.libxi}/lib"
# # "${pkgs.libGL}/lib"
#
# # JavaFX app:
# # "${pkgs.libGL}/lib"
# # "${pkgs.gtk3}/lib"
# # "${pkgs.glib.out}/lib"
# # "${pkgs.xorg.libXtst}/lib"
# ];
# Dynamic libraries from buildinputs:
# LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath buildInputs;
# QT imports to use with "qmlls -E"
# QML_IMPORT_PATH = "${pkgs.qt6.full}/lib/qt-6/qml";
# Set PYTHONPATH
# PYTHONPATH = ".";
# Set matplotlib backend
# MPLBACKEND = "TkAgg";
};
# Provide environment with clang stdenv for "nix develop .#clang"
# clang =
# pkgs.mkShell.override {
# stdenv = pkgs.clangStdenv;
# } {
# inherit shellHook;
# name = description;
#
# # JavaFX app:
# # "${pkgs.libGL}/lib"
# # "${pkgs.gtk3}/lib"
# # "${pkgs.glib.out}/lib"
# # "${pkgs.xorg.libXtst}/lib"
# ];
# Dynamic libraries from buildinputs:
# LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath buildInputs;
# QT imports to use with "qmlls -E"
# QML_IMPORT_PATH = "${pkgs.qt6.full}/lib/qt-6/qml";
# Set PYTHONPATH
# PYTHONPATH = ".";
# Set matplotlib backend
# MPLBACKEND = "TkAgg";
# =========================================================================================
# Define shell environment
# =========================================================================================
# Setup the shell when entering the "nix develop" environment (bash script).
shellHook = let
mkCmakeScript = type: let
typeLower = lib.toLower type;
in
pkgs.writers.writeFish "cmake-${typeLower}.fish" ''
cd $FLAKE_PROJECT_ROOT
echo "Removing build directory ./cmake-build-${typeLower}/"
rm -rf ./cmake-build-${typeLower}
echo "Creating build directory"
mkdir cmake-build-${typeLower}
cd cmake-build-${typeLower}
echo "Running cmake"
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="${type}" -DCMAKE_EXPORT_COMPILE_COMMANDS="On" ..
echo "Linking compile_commands.json"
cd ..
ln -sf ./cmake-build-${typeLower}/compile_commands.json ./compile_commands.json
'';
cmakeDebug = mkCmakeScript "Debug";
cmakeRelease = mkCmakeScript "Release";
mkBuildScript = type: let
typeLower = lib.toLower type;
in
pkgs.writers.writeFish "cmake-build.fish" ''
cd $FLAKE_PROJECT_ROOT/cmake-build-${typeLower}
echo "Running cmake"
cmake --build .
'';
buildDebug = mkBuildScript "Debug";
buildRelease = mkBuildScript "Release";
# Use this to specify commands that should be ran after entering fish shell
initProjectShell = pkgs.writers.writeFish "init-shell.fish" ''
echo "Entering \"${description}\" environment..."
# Determine the project root, used e.g. in cmake scripts
set -g -x FLAKE_PROJECT_ROOT (git rev-parse --show-toplevel)
# Rust Bevy:
# abbr -a build-release-windows "CARGO_FEATURE_PURE=1 cargo xwin build --release --target x86_64-pc-windows-msvc"
# C/C++:
# abbr -a cmake-debug "${cmakeDebug}"
# abbr -a cmake-release "${cmakeRelease}"
# abbr -a build-debug "${buildDebug}"
# abbr -a build-release "${buildRelease}"
# Clojure:
# abbr -a clojure-deps "deps-lock --lein"
# Python:
# abbr -a run "python ./app/main.py"
# abbr -a profile "py-spy record -o profile.svg -- python ./app/main.py && firefox profile.svg"
# abbr -a ptop "py-spy top -- python ./app/main.py"
'';
in
builtins.concatStringsSep "\n" [
# Launch into pure fish shell
''
exec "$(type -p fish)" -C "source ${initProjectShell} && abbr -a menu '${pkgs.bat}/bin/bat "${initProjectShell}"'"
''
# Qt: Launch into wrapped fish shell
# https://nixos.org/manual/nixpkgs/stable/#sec-language-qt
# ''
# fishdir=$(mktemp -d)
# makeWrapper "$(type -p fish)" "$fishdir/fish" "''${qtWrapperArgs[@]}"
# exec "$fishdir/fish" -C "source ${initProjectShell} && abbr -a menu '${pkgs.bat}/bin/bat "${initProjectShell}"'"
# ''
];
# # If not required, use pkgs instead of clangPkgs for a lighter build
# nativeBuildInputs = with pkgs; [];
# buildInputs = with pkgs; [];
#
# # =========================================================================================
# # Define environment variables
# # =========================================================================================
#
# # Dynamic libraries from buildinputs:
# LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath buildInputs;
# };
};
});
}

View File

@ -210,6 +210,10 @@ Convert line endings to dos format
unix2dos <file>
$ file: eza -1
% tiddl
Download stuff from tidal
tiddl download --track-quality max --path ~/Downloads/Beet/Albums --videos none url "<url>"
; ===========================
; SECRETS
; ===========================
@ -234,11 +238,11 @@ $ mode: echo -e "--export \tExport public key\n--export-secret-keys\t
% sops
# Edit secrets.yaml
sops ~/NixFlake/system/modules/sops-nix/secrets.yaml
sops ~/NixFlake/system/systemmodules/sops-nix/secrets.yaml
% sops
# Rekey secrets.yaml
sops updatekeys ~/NixFlake/system/modules/sops-nix/secrets.yaml
sops updatekeys ~/NixFlake/system/systemmodules/sops-nix/secrets.yaml
% ssh
# Generate a new SSH key
@ -304,27 +308,33 @@ mkdir -p "<name>" && cd "<name>" && spotdl --client-id (cat /home/christoph/.sec
% ffmpeg
# Create a slow motion version of a video with interpolated/blended frames
ffmpeg -i "<input>" -filter:v "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=<doublefps>',setpts=2*PTS" output.mp4
ffmpeg -i <input> -filter:v "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=<doublefps>',setpts=2*PTS" output.mp4
$ input: eza -f -1
% ffmpeg
# Detect black bar dimensions automatically by looking at the first 10 frames
ffmpeg -i "<input>" -vframes 10 -vf cropdetect -f null -
ffmpeg -i <input> -vframes 10 -vf cropdetect -f null -
$ input: eza -f -1
% ffmpeg
# Preview video with applied crop settings
ffplay -vf crop=<width>:<height>:<x>:<y> "<input>"
ffplay -vf crop=<width>:<height>:<x>:<y> <input>
$ input: eza -f -1
% ffmpeg
# Re-encode the video with applied crop settings
ffmpeg -i "<input>" -vf crop=<width>:<height>:<x>:<y> -c:a copy output.mp4
ffmpeg -i <input> -vf crop=<width>:<height>:<x>:<y> -c:a copy output.mp4
$ input: eza -f -1
% ffmpeg
# Reencode and compress the video using the h265 codec
ffmpeg -i "<input>" -vcodec libx265 -crf <quality> "out_<input>"
ffmpeg -i <input> -vcodec libx265 -crf <quality> out_<input>
$ input: eza -f -1
$ quality: echo -e "24\n25\n26\n27\n28\n29\n30\n"
% ffmpeg
# Reencode, compress and scale the video using the h265 codec
ffmpeg -i <input> -vcodec libx265 -crf <quality> -vf scale=<width>:-2,setsar=1:1 out_<input>
$ input: eza -f -1
$ quality: echo -e "24\n25\n26\n27\n28\n29\n30\n"

204
config/neovim/bundle.py Normal file
View File

@ -0,0 +1,204 @@
#!/usr/bin/env python3
import argparse
import os
import re
import shutil
import subprocess
from typing import cast
from urllib.request import urlretrieve
INIT_LUA: str = "/home/christoph/.config/nvim/init.lua"
def patch_paths(text: str, mappings: dict[str, str]) -> str:
"""Patches /nix/store paths in init.lua"""
patched = text
for old, new in mappings.items():
print(f"Patching init.lua: {old} -> {new}")
patched = patched.replace(old, new)
return patched
def patch_various(text: str) -> str:
"""Patches various incompatibilities with NixVim init.lua"""
# Install lazy
print("Patching init.lua: Bootstrap lazy.nvim")
patched = (
"""-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
"""
+ text
)
# print("Patching init.lua: Disabling vim.loader")
# patched = patched.replace("vim.loader.enable(true)", "vim.loader.enable(false)")
return patched
def copy_plugins(text: str, path: str) -> dict[str, str]:
"""Copies NeoVim plugins from the Nix Store"""
os.makedirs(path, exist_ok=True)
plugins_path: str = re.findall(r"\"(/nix/store/.*-lazy-plugins)\"", text)[0]
print(f"Copying: {plugins_path} -> {path}/plugins")
_ = shutil.copytree(plugins_path, f"{path}/plugins")
treesitter_path: str = re.findall(
r"\"(/nix/store/.*-vimplugin-nvim-treesitter.*)\"", text
)[0]
print(f"Copying: {treesitter_path} -> {path}/treesitter")
_ = shutil.copytree(treesitter_path, f"{path}/treesitter")
parsers_path: str = re.findall(r"\"(/nix/store/.*-treesitter-parsers)\"", text)[0]
print(f"Copying: {parsers_path} -> {path}/parsers")
_ = shutil.copytree(parsers_path, f"{path}/parsers")
return {
plugins_path: "./plugins",
treesitter_path: "./treesitter",
parsers_path: "./parsers",
}
def write_file(text: str, path: str) -> None:
"""Write text to a file"""
with open(path, "w") as file:
_ = file.write(text)
# TODO: Could add etc. nvim/lsp/formatter/linter binaries here
# TODO: Needs "install recipe", as in most cases the download will be an archive
DOWNLOADS: list[tuple[str, str]] = [
# (
# "https://github.com/neovim/neovim/releases/download/v0.11.6/nvim-linux-x86_64.tar.gz",
# "nvim",
# ),
]
def download_binaries(path: str, urls: list[tuple[str, str]]) -> None:
"""Download required binaries"""
os.makedirs(f"{path}/bin", exist_ok=True)
def download(url: str, path: str) -> None:
"""Download from URL"""
print(f"Downloading: {url}")
_ = urlretrieve(url, path)
for url, name in urls:
download(url, f"{path}/bin/{name}")
def build_nvim(path: str) -> None:
"""Builds a static nvim binary against musl"""
# TODO: Build etc. is working, but on the target system there are
# lua-ffi errors from noice.nvim with the static binary.
# This does not happen with nvim from system package repository.
def run(command: list[str]) -> None:
"""Run a subprocess"""
print(f"Running: {' '.join(command)}")
_ = subprocess.run(command)
os.makedirs(f"{path}/nvim-build", exist_ok=True)
with open(f"{path}/nvim-build/build-nvim.sh", "w") as file:
_ = file.write(
"\n".join(
[
"#!/bin/sh",
"git clone https://github.com/neovim/neovim",
"cd neovim",
"git checkout stable",
'make -j$(nproc) CMAKE_BUILD_TYPE=Release CMAKE_EXTRA_FLAGS="-DSTATIC_BUILD=1"',
"make CMAKE_INSTALL_PREFIX=/workdir/install install",
]
)
)
run(
[
"docker",
"run",
"--rm",
"-it",
"-v",
f"{os.path.abspath(path)}/nvim-build:/workdir",
"-w",
"/workdir",
"alpine:3.23.3",
"/bin/sh",
"-c",
"apk add build-base cmake coreutils curl gettext-tiny-dev git && chmod +x ./build-nvim.sh && ./build-nvim.sh",
]
)
_ = shutil.copytree(f"{path}/nvim-build/install/bin", f"{path}/bin")
_ = shutil.copytree(f"{path}/nvim-build/install/lib", f"{path}/lib")
_ = shutil.copytree(f"{path}/nvim-build/install/share", f"{path}/share")
_ = shutil.rmtree(f"{path}/nvim-build")
def bundle() -> None:
"""Creates a standalone NeoVim bundle from the NixVim configuration"""
parser = argparse.ArgumentParser()
_ = parser.add_argument(
"--config",
type=str,
default=INIT_LUA,
help="init.lua or other config file",
)
_ = parser.add_argument(
"--out",
type=str,
default="./nvim_bundle",
help="destination folder",
)
args = parser.parse_args()
args.config = cast(str, args.config)
args.out = cast(str, args.out)
with open(args.config, "r") as file:
patched_init_lua: str = file.read()
path_mappings = copy_plugins(patched_init_lua, args.out)
patched_init_lua = patch_paths(patched_init_lua, path_mappings)
patched_init_lua = patch_various(patched_init_lua)
write_file(patched_init_lua, f"{args.out}/init.lua")
# build_nvim(args.out)
# download_binaries(args.out, DOWNLOADS)
if __name__ == "__main__":
bundle()

6
config/neovim/info.md Normal file
View File

@ -0,0 +1,6 @@
# NeoVim Portable
## Requirements
- Base packages: `sudo apt install neovim git direnv ripgrep curl fzf`
- Link or copy the generated `nvim_bundle` to `~/.config/nvim` on the target machine

View File

@ -0,0 +1,10 @@
.bordered-images img {
border-radius: var(--callout-radius);
/* border-style: solid; */
/* border-width: var(--callout-border-width); */
/* border-color: var(--color-purple-rgb); */
/* box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); */
/* Background color so PNGs with transparent backgrounds don't look weird */
/* background-color: var(--background-secondary); */
}

View File

@ -1,5 +1,5 @@
img[alt*="center"] {
display: block;
margin-left: auto;
margin-right: auto;
.center-images img {
display: block !important;
margin-left: auto !important;
margin-right: auto !important;
}

View File

@ -0,0 +1,4 @@
.fullwidth-images img {
width: 100% !important;
height: auto !important;
}

View File

@ -0,0 +1,5 @@
.justify-text.cm-s-obsidian,
.justify-text.markdown-preview-view {
text-align: justify;
hyphens: auto;
}

View File

@ -7,7 +7,7 @@
...
}: let
# create a module that only contains the options, type can be home or system
toModule = type: name: {options.modules.${name} = import ../../${type}/modules/${name}/options.nix {inherit lib mylib;};};
toModule = type: name: {options.systemmodules.${name} = import ../../${type}/modules/${name}/options.nix {inherit lib mylib;};};
# evaluate a single module
evalModule = type: name: (lib.evalModules {modules = [(toModule type name)];});

View File

@ -9,4 +9,5 @@
msty = pkgs.callPackage ./msty {};
unityhub = pkgs.callPackage ./unityhub {};
tidal-dl-ng = pkgs.callPackage ./tidal-dl-ng {};
tiddl = pkgs.callPackage ./tiddl {};
}

View File

@ -10,11 +10,12 @@
#
pythonPkgs = pkgs.python313Packages.overrideScope (self: super: {
typer = super.typer.overridePythonAttrs (old: {
version = "0.20.0";
version = "0.20.1";
src = super.fetchPypi {
inherit (old) pname;
version = "0.20.0";
sha256 = "sha256-Gq9klAMXk+SHb7C6z6apErVRz0PB5jyADfixqGZyDDc=";
version = "0.20.1";
# sha256 = "sha256-Gq9klAMXk+SHb7C6z6apErVRz0PB5jyADfixqGZyDDc="; # v0.20.0
sha256 = "sha256-aFhesbASA2icQZm8RA1r5hbwhR6fDrQeSneIRcWg/Vs="; # v0.20.1
};
});
@ -48,30 +49,33 @@
# doCheck = false;
# });
# rich_14_2_0 = pkgs.python313Packages.rich.overridePythonAttrs (old: {
# version = "14.2.0";
# src = pkgs.fetchFromGitHub {
# owner = "Textualize";
# repo = "rich";
# tag = "v14.2.0";
# hash = "sha256-oQbxRbZnVr/Ln+i/hpBw5FlpUp3gcp/7xsxi6onPkn8=";
# };
# });
tidalDlNg = pythonPkgs.buildPythonApplication rec {
pname = "tidal-dl-ng";
version = "0.31.3";
pname = "tidal_dl_ng_for_dj";
version = "0.33.2";
format = "pyproject";
src = pkgs.fetchFromGitHub {
owner = "exislow";
repo = "tidal-dl-ng";
rev = "v${version}";
sha256 = "sha256-PUT0anx1yivgXwW21jah7Rv1/BabOT+KPoW446NFNyg=";
# The official repo was deleted
# src = pkgs.fetchFromGitHub {
# owner = "exislow";
# repo = "tidal-dl-ng";
# rev = "v${version}";
# sha256 = "sha256-PUT0anx1yivgXwW21jah7Rv1/BabOT+KPoW446NFNyg=";
# };
# Package now also deleted from PyPi
# src = pythonPkgs.fetchPypi {
# inherit pname version;
# sha256 = "sha256-rOMyxnT7uVnMbn678DFtqAu4+Uc5VFGcqGI0jxplnpc=";
# };
# TODO: Borked
# "For DJ"-Fork
src = pythonPkgs.fetchPypi {
inherit pname version;
sha256 = "sha256-605cgBqZV6L7sxWtEa4Ki+9hBqX4m3Rk+X5oY5bv/FQ=";
};
doCheck = false;
catchConflicts = false;
dontCheckRuntimeDeps = true;
nativeBuildInputs = with pythonPkgs; [poetry-core setuptools];
@ -96,13 +100,6 @@
typer
rich
];
# pythonOutputDistPhase = ''
# echo "⚠Skipping pythonOutputDistPhase"
# '';
# pythonCatchConflictsPhase = ''
# echo "🛑 Skipping pythonCatchConflictsPhase"
# '';
};
#
@ -131,7 +128,7 @@
tidal-dl-ng-gui-desktopfile = pkgs.stdenv.mkDerivation {
pname = "tdng";
version = "0.31.3";
version = "0.33.2";
dontUnpack = true;
nativeBuildInputs = [pkgs.makeWrapper];

View File

@ -0,0 +1,63 @@
{
lib,
stdenv,
pkgs,
}: let
pythonPkgs = pkgs.python314Packages.overrideScope (self: super: {
typer = super.typer.overridePythonAttrs (old: {
version = "0.20.1";
src = pkgs.fetchPypi {
pname = "typer";
version = "0.20.0";
sha256 = "sha256-Gq9klAMXk+SHb7C6z6apErVRz0PB5jyADfixqGZyDDc=";
};
propagatedBuildInputs = with pythonPkgs; [
typing-extensions
];
});
aiofiles = super.aiofiles.overridePythonAttrs (old: {
version = "25.1.0";
src = pkgs.fetchFromGitHub {
owner = "Tinche";
repo = "aiofiles";
tag = "v25.1.0";
hash = "sha256-NBmzoUb2una3+eWqR1HraVPibaRb9I51aYwskrjxskQ=";
};
# Build system changed in this version
build-system = with pythonPkgs; [
hatchling
hatch-vcs
];
});
});
in
pythonPkgs.buildPythonApplication rec {
pname = "tiddl";
version = "3.4.3";
format = "pyproject";
src = pythonPkgs.fetchPypi {
inherit pname version;
sha256 = "sha256-45KHNS1IP59DsH8i2uQ7sua6T21vW/Yw1PQg55jzLGs=";
};
dontCheckRuntimeDeps = true;
build-system = with pythonPkgs; [
poetry-core
setuptools
];
propagatedBuildInputs = with pythonPkgs; [
# Nixpkgs
aiofiles
aiohttp
m3u8
mutagen
pydantic
requests
requests-cache
typer
];
}

View File

@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
with pkgs;
[
# Unity Hub binary dependencies
xorg.libXrandr
libxrandr
xdg-utils
# GTK filepicker
@ -72,14 +72,14 @@ stdenv.mkDerivation rec {
dbus
at-spi2-core
pango
xorg.libXcomposite
xorg.libXext
xorg.libXdamage
xorg.libXfixes
xorg.libxcb
xorg.libxshmfence
xorg.libXScrnSaver
xorg.libXtst
libxcomposite
libxext
libxdamage
libxfixes
libxcb
libxshmfence
libxScrnSaver
libxtst
# Unity Hub additional dependencies
libva
@ -97,8 +97,8 @@ stdenv.mkDerivation rec {
# Unity Editor dependencies
libglvnd # provides ligbl
xorg.libX11
xorg.libXcursor
libx11
libxcursor
glib
gdk-pixbuf
libxml2-legacy
@ -111,8 +111,8 @@ stdenv.mkDerivation rec {
vulkan-loader
# Unity Bug Reporter specific dependencies
xorg.libICE
xorg.libSM
libICE
libSM
# Fonts used by built-in and third party editor tools
corefonts

1172
flake.lock generated

File diff suppressed because it is too large Load Diff

111
flake.nix
View File

@ -12,8 +12,12 @@
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hardware.url = "github:nixos/nixos-hardware";
# Darwin
nix-darwin.url = "github:nix-darwin/nix-darwin/master";
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
# NOTE: Update this after May and November
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
# Home Manager
home-manager.url = "github:nix-community/home-manager";
@ -53,52 +57,14 @@
niri.url = "github:sodiboo/niri-flake";
niri.inputs.nixpkgs.follows = "nixpkgs";
# Quickshell
quickshell.url = "github:quickshell-mirror/quickshell";
quickshell.inputs.nixpkgs.follows = "nixpkgs";
# Noctalia shell
noctalia.url = "github:noctalia-dev/noctalia-shell";
noctalia.inputs.nixpkgs.follows = "nixpkgs";
# noctalia.inputs.quickshell.follows = "quickshell";
# Lol
waifu-cursors.url = "github:kagurazakei/waifu-cursors";
# Caelestia shell
caelestia.url = "github:caelestia-dots/shell";
caelestia.inputs.nixpkgs.follows = "nixpkgs";
caelestia.inputs.quickshell.follows = "quickshell";
# caelestia-cli.url = "github:caelestia-dots/cli";
# caelestia-cli.inputs.nixpkgs.follows = "nixpkgs";
# DankMaterialShell
# dgop.url = "github:AvengeMedia/dgop";
# dgop.inputs.nixpkgs.follows = "nixpkgs";
# dms-cli.url = "github:AvengeMedia/danklinux";
# dms-cli.inputs.nixpkgs.follows = "nixpkgs";
# dankMaterialShell.url = "github:AvengeMedia/DankMaterialShell";
# dankMaterialShell.inputs.nixpkgs.follows = "nixpkgs";
# dankMaterialShell.inputs.dgop.follows = "dgop";
# Hyprland (use flake so plugins are not built from source)
hyprland.url = "github:hyprwm/Hyprland";
hyprland.inputs.nixpkgs.follows = "nixpkgs";
# HyprPlugins
hyprland-plugins.url = "github:hyprwm/hyprland-plugins";
hyprland-plugins.inputs.nixpkgs.follows = "nixpkgs";
hyprland-plugins.inputs.hyprland.follows = "hyprland";
hypr-dynamic-cursors.url = "github:VirtCode/hypr-dynamic-cursors";
hypr-dynamic-cursors.inputs.nixpkgs.follows = "nixpkgs";
hypr-dynamic-cursors.inputs.hyprland.follows = "hyprland";
hyprspace.url = "github:KZDKM/Hyprspace";
# hyprspace.inputs.nixpkgs.follows = "nixpkgs";
hyprspace.inputs.hyprland.follows = "hyprland";
# Walker
elephant.url = "github:abenz1267/elephant";
walker.url = "github:abenz1267/walker";
walker.inputs.elephant.follows = "elephant";
# NeoVim <3
nixvim.url = "github:nix-community/nixvim";
nixvim.inputs.nixpkgs.follows = "nixpkgs";
# nixvim.inputs.nixpkgs.follows = "nixpkgs";
# Emacs nightly
# emacs-overlay.url = "github:nix-community/emacs-overlay";
@ -112,9 +78,19 @@
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
# nix-flatpak.inputs.nixpkgs.follows = "nixpkgs"; # nix-flatpak doesn't have this
# Instant Direnv (load environment in background)
# direnv-instant.url = "github:Mic92/direnv-instant";
# direnv-instant.inputs.nixpkgs.follows = "nixpkgs";
# Realtime audio
# musnix.url = "github:musnix/musnix";
# musnix.inputs.nixpkgs.follows = "nixpkgs";
# HyTale
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
masssprings.url = "git+https://gitea.local.chriphost.de/christoph/cpp-masssprings";
masssprings.inputs.nixpkgs.follows = "nixpkgs";
};
# Outputs is a function that takes the inputs as arguments.
@ -123,12 +99,14 @@
outputs = {
self,
nixpkgs,
nix-darwin,
...
} @ inputs: let
# Our configuration is buildable on the following system/platform.
# Configs can support more than a single system simultaneously,
# e.g. NixOS (linux) and MacOS (darwin) or Arm.
system = "x86_64-linux";
darwinSystem = "aarch64-darwin";
# We configure our global packages here.
# Usually, "nixpkgs.legacyPackages.${system}" is used (and more efficient),
@ -170,6 +148,26 @@
];
};
darwinPkgs = import nixpkgs {
system = darwinSystem;
hostPlatform = darwinSystem;
config.allowUnfree = true;
config.allowUnfreePredicate = pkg: true;
overlays = let
pkgs-stable = import inputs.nixpkgs-stable {
system = darwinSystem;
config.allowUnfree = true;
config.allowUnfreePredicate = pkg: true;
};
in [
# All my own overlays (derivations + modifications)
(import ./overlays {inherit inputs nixpkgs pkgs-stable;})
];
};
# My own library functions are imported here.
# They are made available to the system and HM configs by inheriting mylib.
mylib = import ./lib {
@ -184,8 +182,15 @@
inherit (nixpkgs) lib;
};
# NOTE: Keep public keys here so they're easy to rotate
darwinMylib = import ./lib {
inherit inputs darwinPkgs;
inherit (nixpkgs) lib;
pkgs = darwinPkgs;
};
# NOTE: Keep public keys here so they're easy to rotate
publicKeys.christoph = {
# /home/christoph/.ssh/id_ed25519.pub
ssh = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJAoJac+GdGtzblCMA0lBfMdSR6aQ4YyovrNglCFGIny christoph.urlacher@protonmail.com";
@ -209,6 +214,22 @@
# Local shell for NixFlake directory
devShells.${system}.default = import ./shell.nix {inherit pkgs;};
# Usage: sudo darwin-rebuild switch --flake .#darwinix
darwinConfigurations = {
darwinix = darwinMylib.nixos.mkDarwinConfigWithHomeManagerModule {
inherit publicKeys;
system = darwinSystem;
mylib = darwinMylib;
hostname = "darwinix";
username = "christoph";
headless = false;
extraModules = [
inputs.sops-nix.darwinModules.sops
];
};
};
# We give each configuration a (host)name to choose a configuration when rebuilding.
# This makes it easy to add different configurations (e.g. for a laptop).
# Usage: sudo nixos-rebuild switch --flake .#nixinator

View File

@ -0,0 +1,54 @@
{
pkgs,
nixosConfig,
config,
lib,
mylib,
username,
inputs,
...
}: {
config = {
paths = rec {
nixflake = "${config.home.homeDirectory}/NixFlake";
dotfiles = "${nixflake}/config";
};
homemodules = {
color = {
scheme = "catppuccin-mocha";
accent = "mauve";
accentHl = "pink";
accentDim = "lavender";
accentText = "base";
font = "MonoLisa Alt Script";
};
packages.enable = true;
terminal.enable = true;
};
home = {
inherit username;
homeDirectory = "/Users/${config.home.username}";
enableNixpkgsReleaseCheck = true;
sessionVariables = {
LANG = "en_US.UTF-8";
EDITOR = "nvim";
MANPAGER = "nvim +Man!";
TERMINAL = "kitty";
};
# packages = with pkgs; []; # Configured in homemodules/packages
stateVersion = "25.11";
};
programs = {};
services = {};
};
}

View File

@ -15,7 +15,7 @@
headless,
...
}: let
inherit (config.modules) color;
inherit (config.homemodules) color;
in
# This is a HM module.
# Because no imports/options/config is defined explicitly, everything is treated as config:
@ -25,16 +25,6 @@ in
# Every module (/function) is called with the same arguments as this module.
# Arguments with matching names are "plugged in" into the right slots,
# the case of different arity is handled by always providing ellipses (...) in module definitions.
imports = [
# Import the host-specific HM config.
# It will be merged with the main config (like all different modules).
# Settings regarding a specific host (e.g. desktop or laptop)
# should only be made in the host-specific config.
./${hostname}
# Import all of my custom HM modules.
../modules
];
# Enable and configure my custom HM modules.
paths = rec {
@ -42,10 +32,9 @@ in
dotfiles = "${nixflake}/config";
};
modules = {
homemodules = {
beets.enable = !headless;
btop.enable = true;
cava.enable = !headless;
chromium = {
enable = !headless;
@ -57,7 +46,8 @@ in
extraPackages = with pkgs; [
papirus-icon-theme
bibata-cursors
inputs.waifu-cursors.packages.${pkgs.stdenv.hostPlatform.system}.all
# Lol
# inputs.waifu-cursors.packages.${pkgs.stdenv.hostPlatform.system}.all
];
cursor = "Bibata-Modern-Classic";
@ -87,221 +77,15 @@ in
disableTabBar = true;
};
fish.enable = true;
git = {
enable = true;
userName = "Christoph Urlacher";
userEmail = "christoph.urlacher@protonmail.com";
signCommits = true;
};
hyprland = {
enable = !headless;
dunst.enable = !config.modules.hyprpanel.enable; # Disable for hyprpanel
bars.enable = false;
dynamicCursor.enable = false;
trails.enable = true;
hyprspace.enable = false; # Always broken
hyprpanel.enable = true;
caelestia.enable = false;
keybindings = {
main-mod = "SUPER";
bindings = lib.mergeAttrsList [
# Use Rofi if we don't have caelestia
(lib.optionalAttrs (!config.modules.hyprland.caelestia.enable) {
"$mainMod, a" = ["exec, rofi -drun-show-actions -show drun"];
"$mainMod, c" = ["exec, clipman pick --tool=rofi"];
"$mainMod SHIFT, l" = ["exec, loginctl lock-session"];
})
# Caelestia
(lib.optionalAttrs (config.modules.hyprland.caelestia.enable) {
"$mainMod, a" = ["exec, caelestia shell drawers toggle launcher"];
# "$mainMod, c" = ["exec, caelestia clipboard"];
"$mainMod SHIFT, l" = ["exec, caelestia shell lock lock"];
"$mainMod, escape" = ["exec, caelestia shell drawers toggle session"];
})
{
# Applications
"$mainMod, t" = ["exec, kitty"];
"$mainMod, e" = ["exec, kitty --title=Yazi yazi"];
"$mainMod, n" = ["exec, neovide"];
# "$mainMod, r" = ["exec, kitty --title=Rmpc rmpc"];
"$mainMod CTRL, n" = ["exec, kitty --title=Navi navi"];
"$mainMod SHIFT, n" = ["exec, neovide ${config.paths.dotfiles}/navi/christoph.cheat"];
"$mainMod SHIFT, f" = ["exec, neovide ${config.paths.dotfiles}/flake.nix"];
# "ALT, tab" = ["exec, rofi -show window"];
# Screenshots
"$mainMod, p" = ["exec, hyprpicker --autocopy --format=hex"];
"$mainMod, s" = ["exec, grim -g \"$(slurp)\""];
"$mainMod SHIFT, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
# Audio
", XF86AudioRaiseVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"];
", XF86AudioLowerVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"];
", XF86AudioPlay" = ["exec, playerctl play-pause"];
", XF86AudioPrev" = ["exec, playerctl previous"];
", XF86AudioNext" = ["exec, playerctl next"];
# Brightness
", XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset gamma -10"];
", XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset gamma +10"];
"$mainMod, XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset temperature 5750"];
"$mainMod, XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset identity"];
"CTRL ALT, f" = let
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
grep = "${pkgs.gnugrep}/bin/grep";
awk = "${pkgs.gawk}/bin/gawk";
notify = "${pkgs.libnotify}/bin/notify-send";
toggleMouseFocus = pkgs.writeScriptBin "hypr-toggle-mouse-focus" ''
CURRENT=$(${hyprctl} getoption input:follow_mouse | ${grep} int | ${awk} -F' ' '{print $2}')
if [[ "$CURRENT" == "1" ]]; then
${hyprctl} keyword input:follow_mouse 0
${notify} "Disabled Mouse Focus!"
else
${hyprctl} keyword input:follow_mouse 1
${notify} "Enabled Mouse Focus!"
fi
'';
in ["exec, ${toggleMouseFocus}/bin/hypr-toggle-mouse-focus"];
# "CTRL ALT, t" = ["exec, bash -c 'systemctl --user restart hyprpanel.service'"];
}
];
ws-bindings = {
# "<Workspace>" = "<Key>";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
};
special-ws-bindings = {
"ferdium" = "x";
"msty" = "z";
"btop" = "b";
"rmpc" = "r";
};
};
autostart = {
immediate = [
"kitty --hold fastfetch"
"zeal"
"nextcloud --background"
"protonvpn-app"
# "kdeconnect-indicator" # started by services.kdeconnect.indicator
];
delayed = [
"keepassxc" # The tray doesn't work when started too early
];
special-silent = {
"ferdium" = ["ferdium"];
"msty" = ["msty"];
"btop" = ["kitty --title=Btop btop"];
"rmpc" = ["kitty --title=Rmpc rmpc"];
};
};
windowrules = [
# Fix jetbrains tooltip flicker
"float,class:^(jetbrains-.*)$,title:^(win[0-9]+)$"
"nofocus,class:^(jetbrains-.*)$,title:^(win[0-9]+)$"
];
workspacerules = {
"1" = [];
"2" = ["Zotero" "neovide" "code-url-handler"];
"3" = ["obsidian"];
"4" = ["firefox" "Google-chrome" "chromium-browser" "org.qutebrowser.qutebrowser"];
"5" = ["steam"];
"6" = ["steam_app_(.+)"];
"7" = ["signal"];
"8" = ["tidal-hifi"];
"9" = ["discord"];
"10" = ["python3"];
};
floating = [
{class = "org.kde.polkit-kde-authentication-agent-1";}
{
class = "thunar";
title = "File Operation Progress";
}
{class = "ffplay";}
{class = "Unity";}
];
transparent-opacity = "0.75";
transparent = [
"kitty"
"Alacritty"
"discord"
"signal"
"vesktop"
"Spotify"
"tidal-hifi"
"obsidian"
"firefox"
"org.qutebrowser.qutebrowser"
"jetbrains-clion"
"jetbrains-idea"
"jetbrains-pycharm"
"jetbrains-rustrover"
"jetbrains-rider"
"jetbrains-webstorm"
"code-url-handler"
"neovide"
"steam"
"ferdium"
"Msty"
];
};
# hyprpanel.enable = !headless; # Enabled by hyprland module
kitty.enable = !headless;
lazygit.enable = true;
mpd.enable = !headless;
neovim = {
enable = true;
alias = true;
neovide = !headless;
};
niri.enable = !headless;
niri.enable = nixosConfig.programs.niri.enable;
nnn.enable = false; # Use yazi
packages.enable = true;
qutebrowser.enable = !headless;
rmpc.enable = !headless;
rofi = {
enable = !headless;
};
waybar.enable = false; # Use hyprpanel
yazi.enable = true;
rofi.enable = false;
terminal.enable = true;
waybar.enable = !headless;
zathura.enable = !headless;
};
@ -318,10 +102,10 @@ in
# as nixosConfig won't be available otherwise.
xdg = {
enable = true; # This only does xdg path management
mime.enable = nixosConfig.modules.mime.enable;
mime.enable = nixosConfig.systemmodules.mime.enable;
mimeApps = {
enable = nixosConfig.modules.mime.enable;
enable = nixosConfig.systemmodules.mime.enable;
associations.added = nixosConfig.xdg.mime.addedAssociations;
associations.removed = nixosConfig.xdg.mime.removedAssociations;
@ -392,7 +176,7 @@ in
config.lib.file.mkOutOfStoreSymlink
nixosConfig.sops.templates."nix.conf".path;
}
(lib.mkIf nixosConfig.modules.desktopportal.termfilechooser.enable {
(lib.mkIf nixosConfig.systemmodules.desktopportal.termfilechooser.enable {
".config/xdg-desktop-portal-termfilechooser/config".text = ''
[filechooser]
cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
@ -402,7 +186,7 @@ in
save_mode = last
'';
})
(lib.mkIf config.modules.git.enable {
(lib.mkIf config.homemodules.git.enable {
".ssh/allowed_signers".text = "* ${publicKeys.${username}.ssh}";
})
(lib.mkIf config.programs.navi.enable {
@ -440,6 +224,15 @@ in
"start_app_minimized": true
}
'';
# KeePassXC
".config/QtProject.conf".text = ''
[FileDialog]
history=@Invalid()
lastVisited=file:///home/christoph/Documents/KeePass
qtVersion=5.15.18
viewMode=Detail
'';
})
];
@ -454,366 +247,13 @@ in
};
# Add stuff for your user as you see fit:
# TODO: Make the headless installations smaller
packages = with pkgs;
lib.mkMerge [
[
# Shell utils
(ripgrep.override {withPCRE2 = true;}) # fast as fuck
gdu # Alternative to du-dust (I like it better)
duf # Disk usage analyzer (for all disk overview)
sd # Sed alternative
fclones # Duplicate file finder
tealdeer # Very fast tldr (so readable man)
killall
atool # Archive preview
ouch # Unified compression/decompression
ffmpegthumbnailer # Video thumbnails
mediainfo # Media meta information
file # File meta information
unrar # Cooler WinRar
p7zip # Zip stuff
unzip # Unzip stuff
progress # Find coreutils processes and show their progress
tokei # Text file statistics in a project
playerctl # Media player control
pastel # Color tools
nvd # Nix rebuild diff
nix-search-tv # Search nixpkgs, nur, nixos options and homemanager options
nix-tree # Browse the nix store sorted by size (gdu for closures)
nurl # Generate nix fetcher sections based on URLs
python313 # Nicer scripting than bash
binsider # Analyze binaries
lazyjournal # Journalctl viewer
systemctl-tui
restic # Backups
# Hardware/Software info
pciutils # lspci
mesa-demos # OpenGL info
wayland-utils # wayland-info
clinfo # OpenCL info
vulkan-tools # vulkaninfo
libva-utils # vainfo
vdpauinfo # Video-Decode and Presentation API for Unix info
hwloc # Generate CPU topology diagram
lm_sensors # Readout hardware sensors
acpica-tools # Dump ACPI tables etc.
smartmontools # Disk health
nvme-cli # NVME disk health
# Video/Image/Audio utils
ffmpeg-full # I love ffmpeg (including ffplay)
ffmpeg-normalize # Normalize audio
imagemagick # Convert image (magic)
mp3val # Validate mp3 files
flac # Validate flac files
spotdl
# Document utils
poppler-utils # pdfunite
graphviz # generate graphs from code
d2 # generate diagrams from code
plantuml # generate diagrams
gnuplot # generate function plots
pdf2svg # extract vector graphics from pdf
pandoc # document converting madness
# Networking
dig # Make DNS requests
tcpdump # Listen in on TCP traffic
traceroute # "Follow" a packet
gping # ping with graph
curlie # curl a'la httpie
wget # download that shit
dogdns # dns client
rsync # cp on steroids
rclone # Rsync for cloud
httpie # Cool http client
cifs-utils # Mount samba shares
nfs-utils # Mount NFS shares
sshfs # Mount remote directories via SSH
# Run unpatched binaries on NixOS
# Sets NIX_LD_LIBRARY_PATH and NIX_LD variables for nix-ld.
# Usage: "nix-alien-ld -- <Executable>".
inputs.nix-alien.packages.${pkgs.stdenv.hostPlatform.system}.nix-alien
# Search nixpkgs
inputs.nps.packages.${pkgs.stdenv.hostPlatform.system}.default
# Use NixCommunity binary cache
cachix
]
(lib.mkIf (!headless) [
ripdrag # drag & drop from terminal
veracrypt
# Proton
protonvpn-gui
protonmail-bridge-gui
# GUI stuff
nautilus # Just in case
signal-desktop
anki
font-manager # Previews fonts, but doesn't set them
nextcloud-client
keepassxc
thunderbird # TODO: Email module
obsidian
zotero
zeal # docs browser
helvum
vlc
audacity
ferdium
gparted
tidal-hifi
tidal-dl-ng
picard
handbrake
teamspeak6-client
# Office
kdePackages.wacomtablet # For xournalpp/krita
xournalpp # Write with a pen, like old people
hunspell # I cna't type
hunspellDicts.en_US
hunspellDicts.de_DE
])
];
# packages = with pkgs; []; # Configured in homemodules/packages
};
# home.file.".options-doc".source = "${pkgs.modules-options-doc}";
# Packages with extra options managed by HomeManager natively
programs = {
# The home-manager management tool.
# Will only be enabled if HM is installed standalone.
home-manager.enable = true;
bat = {
enable = true;
themes = {
catppuccin-latte = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "bat";
rev = "ba4d16880d63e656acced2b7d4e034e4a93f74b1";
sha256 = "sha256-6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw=";
};
file = "Catppuccin-latte.tmTheme";
};
};
config = {
theme = "catppuccin-latte";
};
};
cava = {
enable = !headless;
settings = {
general = {
framerate = 60; # default 60
autosens = 1; # default 1
sensitivity = 100; # default 100
lower_cutoff_freq = 50; # not passed to cava if not provided
higher_cutoff_freq = 10000; # not passed to cava if not provided
};
smoothing = {
noise_reduction = 77; # default 77
monstercat = false; # default false
waves = false; # default false
};
color = {
# https://github.com/catppuccin/cava/blob/main/themes/latte-transparent.cava
gradient = 1;
gradient_color_1 = "'${color.hexS.teal}'";
gradient_color_2 = "'${color.hexS.sky}'";
gradient_color_3 = "'${color.hexS.sapphire}'";
gradient_color_4 = "'${color.hexS.blue}'";
gradient_color_5 = "'${color.hexS.mauve}'";
gradient_color_6 = "'${color.hexS.pink}'";
gradient_color_7 = "'${color.hexS.maroon}'";
gradient_color_8 = "'${color.hexS.red}'";
};
};
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
eza = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
};
# TODO: Module
fastfetch = {
enable = true;
settings = {
logo = {
padding = {
top = 3;
left = 1;
right = 2;
};
};
display = {
separator = "";
key.width = 17;
};
# Box Drawing: ╭ ─ ╮ ╰ ╯ │
modules = [
# Title
{
type = "title";
format = "{#1} {#}{user-name-colored}";
}
# System Information
{
type = "custom";
format = "{#1} {#}System Information";
}
{
type = "os";
key = "{#separator} {#keys}󰍹 OS";
}
{
type = "kernel";
key = "{#separator} {#keys}󰒋 Kernel";
}
{
type = "bootmgr";
key = "{#separator} {#keys}󰒋 BootMGR";
}
{
type = "uptime";
key = "{#separator} {#keys}󰅐 Uptime";
}
{
type = "packages";
key = "{#separator} {#keys}󰏖 Packages";
# format = "{all}";
}
{
type = "custom";
format = "{#1}";
}
# Desktop Environment
{
type = "custom";
format = "{#1} {#}Desktop Environment";
}
{
type = "de";
key = "{#separator} {#keys}󰧨 DE";
}
{
type = "wm";
key = "{#separator} {#keys}󱂬 WM";
}
{
type = "wmtheme";
key = "{#separator} {#keys}󰉼 Theme";
}
{
type = "display";
key = "{#separator} {#keys}󰹑 Resolution";
}
{
type = "shell";
key = "{#separator} {#keys}󰞷 Shell";
}
{
type = "terminalfont";
key = "{#separator} {#keys}󰛖 Font";
}
{
type = "icons";
key = "{#separator} {#keys} Icons";
}
{
type = "cursor";
key = "{#separator} {#keys}󰆽 Cursor";
}
{
type = "custom";
format = "{#1}";
}
# Hardware Information
{
type = "custom";
format = "{#1} {#}Hardware Information";
}
{
type = "board";
key = "{#separator} {#keys} Board";
}
{
type = "cpu";
key = "{#separator} {#keys}󰻠 CPU";
}
{
type = "gpu";
key = "{#separator} {#keys}󰢮 GPU";
}
{
type = "memory";
key = "{#separator} {#keys}󰍛 Memory";
}
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (/)";
# folders = "/";
# }
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (~/Games)";
# folders = "/home/christoph/Games";
# }
{
type = "btrfs";
key = "{#separator} {#keys}󰋊 BTRFS";
}
{
type = "custom";
format = "{#1}";
}
# Colors Footer
{
type = "colors";
key = "{#separator} {#1}";
keyWidth = 6;
symbol = "circle";
}
];
};
};
fd.enable = true;
fzf = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
};
imv = {
enable = !headless;
settings = {
@ -829,7 +269,7 @@ in
keychain = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
enableFishIntegration = config.homemodules.fish.enable;
enableXsessionIntegration = !headless;
keys = ["id_ed25519"];
};
@ -841,14 +281,9 @@ in
};
};
navi = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
};
nix-index = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
enableFishIntegration = config.homemodules.fish.enable;
};
nushell.enable = false;
@ -875,73 +310,6 @@ in
# pointer
# ];
# };
ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
forwardAgent = false;
addKeysToAgent = "no";
compression = true;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no";
};
"nixinator" = {
user = "christoph";
hostname = "192.168.86.50";
};
"servenix" = {
user = "christoph";
hostname = "local.chriphost.de";
};
"thinknix" = {
user = "christoph";
hostname = "think.chriphost.de";
};
"vps" = {
user = "root";
hostname = "vps.chriphost.de";
};
};
};
tmux = {
enable = false;
clock24 = true;
escapeTime = 0; # Delay after pressing escape
# keyMode = "vi";
terminal = "xterm-256color";
plugins = with pkgs; [
{
plugin = tmuxPlugins.catppuccin;
extraConfig = ''
set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavour 'latte' # or frappe, macchiato, mocha
'';
}
];
extraConfig = ''
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
'';
};
yt-dlp.enable = true;
zoxide = {
enable = true;
enableFishIntegration = config.modules.fish.enable;
};
};
services = {
@ -992,14 +360,18 @@ in
# Force Wayland by default
# Context.sockets = ["wayland" "!x11" "!fallback-x11"]; # NOTE: Makes discord + steam crash
Context.filesystems = ["/nix/store:ro"];
Context.filesystems = [
"/nix/store:ro"
"${config.home.homeDirectory}/.themes:ro"
"${config.home.homeDirectory}/.config/gtk-4.0:ro"
];
Environment = {
# Fix un-themed cursor in some Wayland apps
XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons";
# Force correct theme for some GTK apps
GTK_THEME = "Adwaita:light";
GTK_THEME = config.gtk.theme.name;
};
};

View File

@ -3,69 +3,228 @@
pkgs,
nixosConfig,
config,
hostname,
lib,
mylib,
username,
inputs,
...
}: {
imports = [
../../modules
];
config = {
modules = {
homemodules = {
btop.cuda = true;
# This has been relocated here from the default config,
# because it forces en-US keyboard layout.
fcitx.enable = true;
hyprland = {
keyboard = {
layout = "us";
variant = "altgr-intl";
option = "nodeadkeys";
};
waybar.monitors = ["DP-1" "DP-2"];
vscode.enable = true;
zed.enable = true;
};
monitors = {
"DP-1" = {
width = 3440;
height = 1440;
rate = 165;
x = 1920;
y = 0;
scale = 1;
};
"DP-2" = {
width = 1920;
height = 1080;
rate = 60;
x = 0;
y = 0;
scale = 1;
};
};
workspaces = {
"DP-1" = [1 2 3 4 5 6 7 8 9];
"DP-2" = [10];
};
autostart = {
delayed = [
"fcitx5"
];
};
floating = [
{
class = "fcitx";
}
];
programs = {
claude-code = {
enable = true;
enableMcpIntegration = true;
};
waybar.monitor = "DP-1";
mcp = {
enable = true;
servers = {
nixos = {
command = "uvx";
args = ["mcp-nixos"];
};
svelte = {
# claude mcp add -t stdio -s [scope] svelte -- npx -y @sveltejs/mcp
command = "npx";
args = ["-y" "@sveltejs/mcp"];
type = "stdio";
};
shadcn = {
# npx shadcn@latest mcp init --client claude
command = "npx";
args = ["-y" "shadcn@latest" "mcp"];
};
};
};
opencode = {
enable = true;
enableMcpIntegration = true;
extraPackages = with pkgs; [
# opencode-claude-auth # Installed using npm
];
# Writes opencode.json
settings = {
attachment = {
image = {
auto_resize = true;
max_width = 2000;
max_height = 2000;
max_base64_bytes = 5242880;
};
};
autoupdate = false;
compaction = {
auto = true;
prune = true;
reserved = 10000;
};
default_agent = "plan";
enabled_providers = [
"opencode"
"opencode-go"
"anthropic"
];
formatter = {
nixfmt = {
disabled = true;
};
alejandra = {
command = ["alejandra" "$FILE"];
extensions = [".nix"];
};
perltidy = {
command = ["perltidy" "$FILE"];
extensions = [".pl"];
};
};
lsp = {
nixd = {
command = ["nixd"];
extensions = [".nix"];
initialization = {
preferences = {
nixd = {
nixpkgs = {expr = "import <nixpkgs> {}";};
options = {
nixos = {expr = "(builtins.getFlake \"/home/${username}/NixFlake\").nixosConfigurations.${hostname}.options";};
home-manager = {expr = "(builtins.getFlake \"/home/${username}/NixFlake\").nixosConfigurations.\"${hostname}\".options.home-manager.users.type.getSubOptions []";};
};
diagnostic = {
suppress = ["sema-escaping-with" "var-bind-to-this" "escaping-this-with"];
};
};
};
};
};
perlnavigator = {
command = ["perlnavigator"];
extensions = [".pl"];
initialization = {
preferences = {};
};
};
# perlpls = {
# command = ["pls"];
# extensions = [".pl"];
# initialization = {
# preferences = {
# perl = {
# perlcritic = {enabled = false;};
# syntax = {enabled = true;};
# };
# };
# };
# };
r-language-server = {
command = ["R" "--no-echo" "-e" "languageserver::run()"];
extensions = [".r" ".rmd" ".quarto"];
};
};
permission = {
"*" = "ask";
"bash" = {
"*" = "ask";
"ls *" = "allow";
"find *" = "ask"; # Don't want find -exec
"file *" = "allow";
"wc *" = "allow";
"grep *" = "allow";
"rg *" = "allow";
"test *" = "allow";
"echo *" = "allow";
"which *" = "allow";
"pwd *" = "allow";
"dirname *" = "allow";
"basename *" = "allow";
"readlink *" = "allow";
"cat *.env" = "deny";
"cat *.env.*" = "deny";
"cat *.env.example" = "allow";
"printenv *" = "deny";
"env *" = "deny";
"nix eval *" = "allow";
"nix flake metadata *" = "allow";
"nix flake show *" = "allow";
"nix path-info *" = "allow";
"nix why-depends *" = "allow";
"nix derivation show *" = "allow";
"nix store ping *" = "allow";
"nix stire diff-closures *" = "allow";
"git status *" = "allow";
"git log *" = "allow";
"git diff *" = "allow";
};
"external_directory" = {
"/nix/store/**" = "allow";
"/tmp" = "allow";
"/tmp/*" = "allow";
};
"read" = {
"*" = "allow";
"*.env" = "deny";
"*.env.*" = "deny";
"*.env.example" = "allow";
};
"grep" = "allow";
"glob" = "allow";
"lsp" = "allow";
"skill" = "allow";
"task" = "ask";
"todowrite" = "allow";
"webfetch" = "allow";
"websearch" = "allow";
"question" = "allow";
};
plugin = [
"opencode-claude-auth@latest" # https://github.com/griffinmartin/opencode-claude-auth
"@tarquinen/opencode-dcp@latest" # better compacting
# "@slkiser/opencode-quota"
];
share = "disabled";
shell = "fish";
snapshot = false;
watcher = {
ignore = ["node_modules/**" "dist/**" ".git/**"];
};
};
# Writes tui.json
tui = {
theme = "system";
diff_style = "auto";
mouse = true;
attention = {
enabled = true;
notifications = true;
sound = true;
volume = "0.3";
};
};
agents = {};
commands = {};
context = '''';
skills = {};
tools = {};
};
};
home = let
@ -117,52 +276,68 @@
# Intel FPGA design software
# quartus-prime-lite
# jetbrains.clion
jetbrains.clion
# jetbrains.rust-rover
# jetbrains.pycharm-professional
# jetbrains.idea-ultimate
# jetbrains.webstorm
# jetbrains.rider
# ghidra # launch with _JAVA_AWT_WM_NONREPARENTING=1 (use programs.ghidra)
# zed-editor # Using module
# vscode # Using module
# Unity Stuff
# TODO: Unity module
# unityhub
# rider-unity
# dotnetCore
# mono
# steam-run-free # nix-alien doesn't seem to run unity apps, this does...
inputs.hytale-launcher.packages.${pkgs.stdenv.hostPlatform.system}.default
(blender.override {cudaSupport = true;})
godot_4
(obs-studio.override {cudaSupport = true;})
kdePackages.kdenlive
# davinci-resolve
krita
makemkv
lrcget
msty
# msty
# jellyfin-media-player # CVE, can't install
jellyfin-desktop
jellyfin-mpv-shim
# tidal-hifi
# tidal-dl-ng # TODO: Borked
# spotdl
tiddl
picard
handbrake
teamspeak6-client
# virt-manager # use system program option
virt-viewer
gnome-boxes # doesn't list VMs imported using virsh
steam-devices-udev-rules
];
file = lib.mkMerge [
# {
# ".local/share/applications/jetbrains-rider.desktop".source = let
# desktopFile = pkgs.makeDesktopItem {
# name = "jetbrains-rider";
# desktopName = "Rider";
# exec = "\"${rider-unity}/bin/rider\"";
# icon = "rider";
# type = "Application";
# # Don't show desktop icon in search or run launcher
# extraConfig.NoDisplay = "true";
# };
# in "${desktopFile}/share/applications/jetbrains-rider.desktop";
#
# ".var/app/com.valvesoftware.Steam/config/MangoHud/MangoHud.conf".source =
# ../../../config/mangohud/MangoHud.conf;
# }
{
# ".local/share/applications/jetbrains-rider.desktop".source = let
# desktopFile = pkgs.makeDesktopItem {
# name = "jetbrains-rider";
# desktopName = "Rider";
# exec = "\"${rider-unity}/bin/rider\"";
# icon = "rider";
# type = "Application";
# # Don't show desktop icon in search or run launcher
# extraConfig.NoDisplay = "true";
# };
# in "${desktopFile}/share/applications/jetbrains-rider.desktop";
".var/app/com.valvesoftware.Steam/config/MangoHud/MangoHud.conf".source =
../../../config/mangohud/MangoHud.conf;
}
(lib.optionalAttrs (mylib.modules.contains config.home.packages pkgs.makemkv) {
".MakeMKV/settings.conf".source =
config.lib.file.mkOutOfStoreSymlink
@ -176,46 +351,21 @@
};
services = {
ollama = {
enable = true;
acceleration = "cuda";
# home = "/var/lib/ollama";
# loadModels = [
# "deepseek-r1:8b" # Default
# "deepseek-r1:14b"
# ];
# https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server
environmentVariables = {
# Flash Attention is a feature of most modern models
# that can significantly reduce memory usage as the context size grows.
OLLAMA_FLASH_ATTENTION = "1";
# The K/V context cache can be quantized to significantly
# reduce memory usage when Flash Attention is enabled.
OLLAMA_KV_CACHE_TYPE = "q8_0"; # f16, q8_0 q4_0
# To improve Retrieval-Augmented Generation (RAG) performance, you should increase
# the context length to 8192+ tokens in your Ollama model settings.
OLLAMA_CONTEXT_LENGTH = "8192";
};
host = "127.0.0.1";
port = 11434;
};
flatpak = {
packages = [
# "com.valvesoftware.Steam"
# "com.valvesoftware.Steam.Utility.steamtinkerlaunch"
"com.valvesoftware.Steam"
"com.valvesoftware.Steam.Utility.steamtinkerlaunch"
"org.freedesktop.Platform.VulkanLayer.gamescope/x86_64/24.08"
"org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/24.08"
"io.github.Foldex.AdwSteamGtk"
"com.vysp3r.ProtonPlus"
# "net.davidotek.pupgui2"
# "org.freedesktop.Platform.VulkanLayer.gamescope/x86_64/24.08"
# "org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/24.08"
"org.prismlauncher.PrismLauncher"
"com.usebottles.bottles"
# "io.github.lawstorant.boxflat"
"io.github.lawstorant.boxflat"
"org.onlyoffice.desktopeditors"
# "com.unity.UnityHub"
];
@ -245,6 +395,13 @@
];
};
"com.vysp3r.ProtonPlus".Context = {
filesystems = [
"${config.home.homeDirectory}/.var/app/com.valvesoftware.Steam"
"${config.home.homeDirectory}/Games"
];
};
"com.usebottles.bottles".Context = {
filesystems = [
"${config.home.homeDirectory}/.var/app/com.valvesoftware.Steam"

View File

@ -1,39 +1,39 @@
# Here goes the stuff that will only be enabled on the laptop
{...}: {
imports = [
../../modules
];
{pkgs, ...}: {
config = {
modules = {
hyprland = {
keyboard = {
layout = "us";
variant = "altgr-intl";
option = "nodeadkeys";
};
homemodules = {
# TODO: Niri config (needs to modularize niri module)
monitors = {
"eDP-1" = {
width = 1920;
height = 1080;
rate = 60;
x = 0;
y = 0;
scale = 1;
};
};
# hyprland = {
# keyboard = {
# layout = "us";
# variant = "altgr-intl";
# option = "nodeadkeys";
# };
#
# monitors = {
# "eDP-1" = {
# width = 1920;
# height = 1080;
# rate = 60;
# x = 0;
# y = 0;
# scale = 1;
# };
# };
#
# workspaces = {
# "eDP-1" = [1 2 3 4 5 6 7 8 9];
# };
# };
workspaces = {
"eDP-1" = [1 2 3 4 5 6 7 8 9];
};
};
waybar.monitor = "eDP-1";
waybar.monitors = ["eDP-1"];
};
home = {
# packages = with pkgs; [];
packages = with pkgs; [
brightnessctl
];
# Do not change.
# This marks the version when NixOS was installed for backwards-compatibility.

View File

@ -6,12 +6,8 @@
username,
...
}: {
imports = [
../../modules
];
config = {
modules = {
homemodules = {
btop.cuda = true;
};

View File

@ -6,10 +6,6 @@
username,
...
}: {
imports = [
../../modules
];
config = {
home.packages = with pkgs; [
docker-compose

View File

@ -0,0 +1,14 @@
{
config,
nixosConfig,
lib,
mylib,
pkgs,
...
}: let
inherit (config.homemodules) TEMPLATE color;
in {
options.homemodules.TEMPLATE = import ./options.nix {inherit lib mylib;};
config = lib.mkIf TEMPLATE.enable {};
}

View File

@ -6,9 +6,9 @@
pkgs,
...
}: let
inherit (config.modules) ags;
inherit (config.homemodules) ags;
in {
options.modules.ags = import ./options.nix {inherit lib mylib;};
options.homemodules.ags = import ./options.nix {inherit lib mylib;};
config = lib.mkIf ags.enable {
programs.ags = {
@ -68,7 +68,7 @@ in {
# ".config/ags".source = config.lib.file.mkOutOfStoreSymlink "${config.paths.nixflake}/home/modules/ags/config";
# NOTE: Don't symlink to ~/.config/ags/colors.scss, since that is already used by configDir
".config/_colors.scss".text = with config.modules.color.hex; ''
".config/_colors.scss".text = with config.homemodules.color.hex; ''
$dark-rosewater: #${dark.rosewater};
$dark-flamingo: #${dark.flamingo};
$dark-pink: #${dark.pink};

View File

@ -5,9 +5,9 @@
...
}:
with mylib.modules; let
cfg = config.modules.alacritty;
cfg = config.homemodules.alacritty;
in {
options.modules.alacritty = import ./options.nix {inherit lib mylib;};
options.homemodules.alacritty = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
programs.alacritty = {

View File

@ -8,14 +8,14 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.audio;
cfgfp = config.modules.flatpak;
cfg = config.homemodules.audio;
cfgfp = config.homemodules.flatpak;
in {
imports = [
../flatpak
];
options.modules.audio = import ./options.nix {inherit lib mylib;};
options.homemodules.audio = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
assertions = [

View File

@ -12,13 +12,13 @@ with lib;
with mylib.modules; let
# This is the current state of the option that this module defines
# We use it to determine if the config should be changed below
cfg = config.modules.emacs;
cfg = config.homemodules.emacs;
in {
imports = [];
# Options is a vector of options this module defines
# This module defines only the "emacs" option and suboptions "enable" and "doom"
options.modules.emacs = import ./options.nix {inherit lib mylib;};
options.homemodules.emacs = import ./options.nix {inherit lib mylib;};
# Config is the merged set of all module configurations
# Here we define what happens to the config if the module is active (but only if the module is active)

View File

@ -13,9 +13,9 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.email;
cfg = config.homemodules.email;
in {
options.modules.email = import ./options.nix {inherit lib mylib;};
options.homemodules.email = import ./options.nix {inherit lib mylib;};
# TODO: Add Maildir to nextcloud sync
config = mkIf cfg.enable {

View File

@ -12,9 +12,9 @@ with mylib.modules;
# It is important that every flatpak interaction is handled through this module
# to prevent that anything is removed by a module although it is required by another one
let
cfg = config.modules.flatpak;
cfg = config.homemodules.flatpak;
in {
options.modules.flatpak = import ./options.nix {inherit lib mylib;};
options.homemodules.flatpak = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
assertions = [

View File

@ -7,11 +7,11 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.gaming;
cfgfp = config.modules.flatpak;
cfg = config.homemodules.gaming;
cfgfp = config.homemodules.flatpak;
in {
imports = [
# NOTE: I don't know if this is the right approach or if I should use config.modules.flatpak
# NOTE: I don't know if this is the right approach or if I should use config.homemodules.flatpak
../flatpak
];
@ -19,7 +19,7 @@ in {
# TODO: SteamTinkerLaunch option
# TODO: Dolphin + SteamRomManager option
options.modules.gaming = import ./options.nix {inherit lib mylib;};
options.homemodules.gaming = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
assertions = [

View File

@ -10,9 +10,9 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.helix;
cfg = config.homemodules.helix;
in {
options.modules.helix = import ./options.nix {inherit lib mylib;};
options.homemodules.helix = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
home.sessionVariables = {

View File

@ -8,7 +8,7 @@
username,
...
}: let
inherit (config.modules) hyprland color;
inherit (config.homemodules) hyprland color;
# Autostart programs
always-exec = import ./autostart.nix {inherit lib pkgs config hyprland;};
@ -22,7 +22,7 @@
"$mainMod, mouse:273" = ["resizewindow"];
};
in {
options.modules.hyprland = import ./options.nix {inherit lib mylib;};
options.homemodules.hyprland = import ./options.nix {inherit lib mylib;};
config = lib.mkIf hyprland.enable {
assertions = [
@ -46,7 +46,7 @@ in {
iconTheme.name = color.iconTheme;
};
modules = {
homemodules = {
hyprpanel.enable = hyprland.hyprpanel.enable;
};

View File

@ -11,7 +11,7 @@
settings = {
global = {
monitor = config.modules.waybar.monitor;
monitor = config.homemodules.waybar.monitor;
font = "${color.font} 11";
offset = "10x10";
background = color.hexS.base;

View File

@ -0,0 +1,44 @@
{
keyboard = {
layout = "us";
variant = "altgr-intl";
option = "nodeadkeys";
};
monitors = {
"DP-1" = {
width = 3440;
height = 1440;
rate = 165;
x = 1920;
y = 0;
scale = 1;
};
"DP-2" = {
width = 1920;
height = 1080;
rate = 60;
x = 0;
y = 0;
scale = 1;
};
};
workspaces = {
"DP-1" = [1 2 3 4 5 6 7 8 9];
"DP-2" = [10];
};
autostart = {
delayed = [
"fcitx5"
];
};
floating = [
{
class = "fcitx";
}
];
}

View File

@ -0,0 +1,186 @@
{
nixosConfig,
config,
lib,
pkgs,
}: {
enable = nixosConfig.programs.hyprland.enable;
dunst.enable = !config.homemodules.hyprpanel.enable; # Disable for hyprpanel
bars.enable = false;
dynamicCursor.enable = false;
trails.enable = true;
hyprspace.enable = false; # Always broken
hyprpanel.enable = true;
caelestia.enable = false;
keybindings = {
main-mod = "SUPER";
bindings = lib.mergeAttrsList [
# Use Rofi if we don't have caelestia
(lib.optionalAttrs (!config.homemodules.hyprland.caelestia.enable) {
"$mainMod, a" = ["exec, rofi -drun-show-actions -show drun"];
"$mainMod, c" = ["exec, clipman pick --tool=rofi"];
"$mainMod SHIFT, l" = ["exec, loginctl lock-session"];
})
# Caelestia
(lib.optionalAttrs (config.homemodules.hyprland.caelestia.enable) {
"$mainMod, a" = ["exec, caelestia shell drawers toggle launcher"];
# "$mainMod, c" = ["exec, caelestia clipboard"];
"$mainMod SHIFT, l" = ["exec, caelestia shell lock lock"];
"$mainMod, escape" = ["exec, caelestia shell drawers toggle session"];
})
{
# Applications
"$mainMod, t" = ["exec, kitty"];
"$mainMod, e" = ["exec, kitty --title=Yazi yazi"];
"$mainMod, n" = ["exec, neovide"];
# "$mainMod, r" = ["exec, kitty --title=Rmpc rmpc"];
"$mainMod CTRL, n" = ["exec, kitty --title=Navi navi"];
"$mainMod SHIFT, n" = ["exec, neovide ${config.paths.dotfiles}/navi/christoph.cheat"];
"$mainMod SHIFT, f" = ["exec, neovide ${config.paths.dotfiles}/flake.nix"];
# "ALT, tab" = ["exec, rofi -show window"];
# Screenshots
"$mainMod, p" = ["exec, hyprpicker --autocopy --format=hex"];
"$mainMod, s" = ["exec, grim -g \"$(slurp)\""];
"$mainMod SHIFT, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
# Audio
", XF86AudioRaiseVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"];
", XF86AudioLowerVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"];
", XF86AudioPlay" = ["exec, playerctl play-pause"];
", XF86AudioPrev" = ["exec, playerctl previous"];
", XF86AudioNext" = ["exec, playerctl next"];
# Brightness
", XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset gamma -10"];
", XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset gamma +10"];
"$mainMod, XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset temperature 5750"];
"$mainMod, XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset identity"];
"CTRL ALT, f" = let
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
grep = "${pkgs.gnugrep}/bin/grep";
awk = "${pkgs.gawk}/bin/gawk";
notify = "${pkgs.libnotify}/bin/notify-send";
toggleMouseFocus = pkgs.writeScriptBin "hypr-toggle-mouse-focus" ''
CURRENT=$(${hyprctl} getoption input:follow_mouse | ${grep} int | ${awk} -F' ' '{print $2}')
if [[ "$CURRENT" == "1" ]]; then
${hyprctl} keyword input:follow_mouse 0
${notify} "Disabled Mouse Focus!"
else
${hyprctl} keyword input:follow_mouse 1
${notify} "Enabled Mouse Focus!"
fi
'';
in ["exec, ${toggleMouseFocus}/bin/hypr-toggle-mouse-focus"];
# "CTRL ALT, t" = ["exec, bash -c 'systemctl --user restart hyprpanel.service'"];
}
];
ws-bindings = {
# "<Workspace>" = "<Key>";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
};
special-ws-bindings = {
"ferdium" = "x";
"msty" = "z";
"btop" = "b";
"rmpc" = "r";
};
};
autostart = {
immediate = [
"kitty --hold fastfetch"
"zeal"
"nextcloud --background"
"protonvpn-app"
# "kdeconnect-indicator" # started by services.kdeconnect.indicator
];
delayed = [
"keepassxc" # The tray doesn't work when started too early
];
special-silent = {
"ferdium" = ["ferdium"];
"msty" = ["msty"];
"btop" = ["kitty --title=Btop btop"];
"rmpc" = ["kitty --title=Rmpc rmpc"];
};
};
windowrules = [
# Fix jetbrains tooltip flicker
"match:class ^(jetbrains-.*)$, match:title ^(win[0-9]+)$, float 1"
"match:class ^(jetbrains-.*)$, match:title ^(win[0-9]+)$, no_initial_focus 1"
];
workspacerules = {
"1" = [];
"2" = ["Zotero" "neovide" "code-url-handler"];
"3" = ["obsidian"];
"4" = ["firefox" "Google-chrome" "chromium-browser" "org.qutebrowser.qutebrowser"];
"5" = ["steam"];
"6" = ["steam_app_(.+)"];
"7" = ["signal"];
"8" = ["tidal-hifi"];
"9" = ["discord"];
"10" = ["python3"];
};
floating = [
{class = "org.kde.polkit-kde-authentication-agent-1";}
{
class = "thunar";
title = "File Operation Progress";
}
{class = "ffplay";}
{class = "Unity";}
];
transparent-opacity = "0.75";
transparent = [
"kitty"
"Alacritty"
"discord"
"signal"
"vesktop"
"Spotify"
"tidal-hifi"
"obsidian"
"firefox"
"org.qutebrowser.qutebrowser"
"jetbrains-clion"
"jetbrains-idea"
"jetbrains-pycharm"
"jetbrains-rustrover"
"jetbrains-rider"
"jetbrains-webstorm"
"code-url-handler"
"neovide"
"steam"
"ferdium"
"Msty"
];
}

View File

@ -111,19 +111,19 @@
windowrule = let
mkWorkspaceRule = workspace: class:
"workspace ${workspace}, "
+ "class:^(${class})$";
"match:class ^(${class})$, "
+ "workspace ${workspace}";
mkWorkspaceRules = workspace: class-list:
builtins.map (mkWorkspaceRule workspace) class-list;
mkFloatingRule = attrs:
"float"
+ (lib.optionalString (builtins.hasAttr "class" attrs) ", class:^(${attrs.class})$")
+ (lib.optionalString (builtins.hasAttr "title" attrs) ", title:^(${attrs.title})$");
(lib.optionalString (builtins.hasAttr "class" attrs) "match:class ^(${attrs.class})$, ")
+ (lib.optionalString (builtins.hasAttr "title" attrs) "match:title ^(${attrs.title})$, ")
+ "float 1";
mkTranslucentRule = class:
"opacity ${hyprland.transparent-opacity} ${hyprland.transparent-opacity}, "
+ "class:^(${class})$";
"match:class ^(${class})$, "
+ "opacity ${hyprland.transparent-opacity} ${hyprland.transparent-opacity}";
in
lib.mkMerge [
(hyprland.workspacerules
@ -165,15 +165,15 @@
# Because those are not windows, but layers,
# we have to blur them explicitly
layerrule = [
"blur,rofi"
"ignorealpha 0.001,rofi" # Fix pixelated corners
"xray 0,rofi" # Render on top of other windows
"dimaround,rofi"
"match:class rofi, blur 1"
# "match:class rofi, ignore_alpha 0.001" # Fix pixelated corners
# "match:class rofi, xray 0" # Render on top of other windows
# "match:class rofi, dim_around 1"
"blur,waybar"
"blur,gtk4-layer-shell"
"blur,bar-0"
"blur,bar-1"
"match:class waybar, blur 1"
"match:class gtk4-layer-shell, blur 1"
"match:class bar-0, blur 1"
"match:class bar-1, blur 1"
];
decoration = {

View File

@ -6,9 +6,9 @@
pkgs,
...
}: let
inherit (config.modules) hyprpanel color;
inherit (config.homemodules) hyprpanel color;
in {
options.modules.hyprpanel = import ./options.nix {inherit lib mylib;};
options.homemodules.hyprpanel = import ./options.nix {inherit lib mylib;};
config = lib.mkIf hyprpanel.enable {
programs.hyprpanel = {

View File

@ -9,9 +9,9 @@
# TODO: Remove this module, put protonmail into the email module
with lib;
with mylib.modules; let
cfg = config.modules.misc;
cfg = config.homemodules.misc;
in {
options.modules.misc = import ./options.nix {inherit lib mylib;};
options.homemodules.misc = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
home.packages = with pkgs;

View File

@ -12,9 +12,9 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.nextcloud;
cfg = config.homemodules.nextcloud;
in {
options.modules.nextcloud = import ./options.nix {inherit lib mylib;};
options.homemodules.nextcloud = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
assertions = [

View File

@ -0,0 +1,555 @@
{
"id": "catppuccin",
"name": "Catppuccin",
"version": "1.0.0",
"author": "Avenge Media",
"description": "Soothing pastel theme for the high-spirited",
"dark": {},
"light": {},
"variants": {
"type": "multi",
"defaults": {
"dark": {
"accent": "mauve",
"flavor": "mocha"
},
"light": {
"accent": "mauve",
"flavor": "latte"
}
},
"flavors": [
{
"id": "mocha",
"name": "Mocha",
"dark": {
"surface": "#181825",
"surfaceText": "#cdd6f4",
"surfaceVariant": "#1e1e2e",
"surfaceVariantText": "#a6adc8",
"background": "#1e1e2e",
"backgroundText": "#cdd6f4",
"outline": "#6c7086",
"surfaceContainer": "#1e1e2e",
"surfaceContainerHigh": "#313244",
"surfaceContainerHighest": "#45475a",
"error": "#f38ba8",
"warning": "#fab387",
"info": "#89b4fa"
},
"light": {}
},
{
"id": "macchiato",
"name": "Macchiato",
"dark": {
"surface": "#1e2030",
"surfaceText": "#cad3f5",
"surfaceVariant": "#24273a",
"surfaceVariantText": "#a5adcb",
"background": "#24273a",
"backgroundText": "#cad3f5",
"outline": "#6e738d",
"surfaceContainer": "#24273a",
"surfaceContainerHigh": "#363a4f",
"surfaceContainerHighest": "#494d64",
"error": "#ed8796",
"warning": "#f5a97f",
"info": "#8aadf4"
},
"light": {}
},
{
"id": "frappe",
"name": "Frappé",
"dark": {
"surface": "#292c3c",
"surfaceText": "#c6d0f5",
"surfaceVariant": "#303446",
"surfaceVariantText": "#a5adce",
"background": "#303446",
"backgroundText": "#c6d0f5",
"outline": "#737994",
"surfaceContainer": "#303446",
"surfaceContainerHigh": "#414559",
"surfaceContainerHighest": "#51576d",
"error": "#e78284",
"warning": "#ef9f76",
"info": "#8caaee"
},
"light": {}
},
{
"id": "latte",
"name": "Latte",
"dark": {},
"light": {
"surface": "#e6e9ef",
"surfaceText": "#4c4f69",
"surfaceVariant": "#eff1f5",
"surfaceVariantText": "#6c6f85",
"background": "#eff1f5",
"backgroundText": "#4c4f69",
"outline": "#9ca0b0",
"surfaceContainer": "#e6e9ef",
"surfaceContainerHigh": "#ccd0da",
"surfaceContainerHighest": "#bcc0cc",
"error": "#d20f39",
"warning": "#fe640b",
"info": "#1e66f5"
}
}
],
"accents": [
{
"frappe": {
"primary": "#f2d5cf",
"primaryText": "#303446",
"primaryContainer": "#76534f",
"secondary": "#eebebe",
"surfaceTint": "#3a2f33"
},
"id": "rosewater",
"latte": {
"primary": "#dc8a78",
"primaryText": "#eff1f5",
"primaryContainer": "#f6e7e3",
"secondary": "#dd7878",
"surfaceTint": "#f6e7e3"
},
"macchiato": {
"primary": "#f4dbd6",
"primaryText": "#24273a",
"primaryContainer": "#7a5853",
"secondary": "#f0c6c6",
"surfaceTint": "#3b3035"
},
"mocha": {
"primary": "#f5e0dc",
"primaryText": "#1e1e2e",
"primaryContainer": "#7d5d56",
"secondary": "#f2cdcd",
"surfaceTint": "#3d3237"
},
"name": "Rosewater"
},
{
"frappe": {
"primary": "#eebebe",
"primaryText": "#303446",
"primaryContainer": "#744f52",
"secondary": "#f2d5cf",
"surfaceTint": "#392e31"
},
"id": "flamingo",
"latte": {
"primary": "#dd7878",
"primaryText": "#eff1f5",
"primaryContainer": "#f6e5e5",
"secondary": "#dc8a78",
"surfaceTint": "#f6e5e5"
},
"macchiato": {
"primary": "#f0c6c6",
"primaryText": "#24273a",
"primaryContainer": "#775256",
"secondary": "#f4dbd6",
"surfaceTint": "#3a3033"
},
"mocha": {
"primary": "#f2cdcd",
"primaryText": "#1e1e2e",
"primaryContainer": "#7a555a",
"secondary": "#f5e0dc",
"surfaceTint": "#3c3134"
},
"name": "Flamingo"
},
{
"frappe": {
"primary": "#f4b8e4",
"primaryText": "#303446",
"primaryContainer": "#793d65",
"secondary": "#ca9ee6",
"surfaceTint": "#3c2e37"
},
"id": "pink",
"latte": {
"primary": "#ea76cb",
"primaryText": "#eff1f5",
"primaryContainer": "#f7d7ee",
"secondary": "#8839ef",
"surfaceTint": "#f7d7ee"
},
"macchiato": {
"primary": "#f5bde6",
"primaryText": "#24273a",
"primaryContainer": "#7a3e67",
"secondary": "#c6a0f6",
"surfaceTint": "#3d2f38"
},
"mocha": {
"primary": "#f5c2e7",
"primaryText": "#1e1e2e",
"primaryContainer": "#7a3f69",
"secondary": "#cba6f7",
"surfaceTint": "#3d2f39"
},
"name": "Pink"
},
{
"frappe": {
"primary": "#ca9ee6",
"primaryText": "#303446",
"primaryContainer": "#542f79",
"secondary": "#babbf1",
"surfaceTint": "#33293c"
},
"id": "mauve",
"latte": {
"primary": "#8839ef",
"primaryText": "#eff1f5",
"primaryContainer": "#eadcff",
"secondary": "#7287fd",
"surfaceTint": "#eadcff"
},
"macchiato": {
"primary": "#c6a0f6",
"primaryText": "#24273a",
"primaryContainer": "#532f7d",
"secondary": "#b7bdf8",
"surfaceTint": "#32293e"
},
"mocha": {
"primary": "#cba6f7",
"primaryText": "#1e1e2e",
"primaryContainer": "#55307f",
"secondary": "#b4befe",
"surfaceTint": "#33293f"
},
"name": "Mauve"
},
{
"frappe": {
"primary": "#e78284",
"primaryText": "#303446",
"primaryContainer": "#692233",
"secondary": "#ea999c",
"surfaceTint": "#38272e"
},
"id": "red",
"latte": {
"primary": "#d20f39",
"primaryText": "#eff1f5",
"primaryContainer": "#f6d0d6",
"secondary": "#e64553",
"surfaceTint": "#f6d0d6"
},
"macchiato": {
"primary": "#ed8796",
"primaryText": "#24273a",
"primaryContainer": "#6c2336",
"secondary": "#ee99a0",
"surfaceTint": "#3a2830"
},
"mocha": {
"primary": "#f38ba8",
"primaryText": "#1e1e2e",
"primaryContainer": "#6f2438",
"secondary": "#eba0ac",
"surfaceTint": "#3c2930"
},
"name": "Red"
},
{
"frappe": {
"primary": "#ea999c",
"primaryText": "#303446",
"primaryContainer": "#69333d",
"secondary": "#e78284",
"surfaceTint": "#382a2f"
},
"id": "maroon",
"latte": {
"primary": "#e64553",
"primaryText": "#eff1f5",
"primaryContainer": "#f7d8dc",
"secondary": "#d20f39",
"surfaceTint": "#f7d8dc"
},
"macchiato": {
"primary": "#ee99a0",
"primaryText": "#24273a",
"primaryContainer": "#6b343f",
"secondary": "#ed8796",
"surfaceTint": "#392b30"
},
"mocha": {
"primary": "#eba0ac",
"primaryText": "#1e1e2e",
"primaryContainer": "#6d3641",
"secondary": "#f38ba8",
"surfaceTint": "#3a2c31"
},
"name": "Maroon"
},
{
"frappe": {
"primary": "#ef9f76",
"primaryText": "#303446",
"primaryContainer": "#6d3e24",
"secondary": "#e5c890",
"surfaceTint": "#382e27"
},
"id": "peach",
"latte": {
"primary": "#fe640b",
"primaryText": "#eff1f5",
"primaryContainer": "#ffe4d5",
"secondary": "#df8e1d",
"surfaceTint": "#ffe4d5"
},
"macchiato": {
"primary": "#f5a97f",
"primaryText": "#24273a",
"primaryContainer": "#704025",
"secondary": "#eed49f",
"surfaceTint": "#3a2f28"
},
"mocha": {
"primary": "#fab387",
"primaryText": "#1e1e2e",
"primaryContainer": "#734226",
"secondary": "#f9e2af",
"surfaceTint": "#3b3028"
},
"name": "Peach"
},
{
"frappe": {
"primary": "#e5c890",
"primaryText": "#303446",
"primaryContainer": "#68542c",
"secondary": "#a6d189",
"surfaceTint": "#383428"
},
"id": "yellow",
"latte": {
"primary": "#df8e1d",
"primaryText": "#eff1f5",
"primaryContainer": "#fff6d6",
"secondary": "#40a02b",
"surfaceTint": "#fff6d6"
},
"macchiato": {
"primary": "#eed49f",
"primaryText": "#24273a",
"primaryContainer": "#6b572e",
"secondary": "#a6da95",
"surfaceTint": "#393529"
},
"mocha": {
"primary": "#f9e2af",
"primaryText": "#1e1e2e",
"primaryContainer": "#6e5a2f",
"secondary": "#a6e3a1",
"surfaceTint": "#3a362a"
},
"name": "Yellow"
},
{
"frappe": {
"primary": "#a6d189",
"primaryText": "#303446",
"primaryContainer": "#2d5932",
"secondary": "#81c8be",
"surfaceTint": "#2a362b"
},
"id": "green",
"latte": {
"primary": "#40a02b",
"primaryText": "#eff1f5",
"primaryContainer": "#dff4e0",
"secondary": "#179299",
"surfaceTint": "#dff4e0"
},
"macchiato": {
"primary": "#a6da95",
"primaryText": "#24273a",
"primaryContainer": "#2e5c34",
"secondary": "#8bd5ca",
"surfaceTint": "#2b372c"
},
"mocha": {
"primary": "#a6e3a1",
"primaryText": "#1e1e2e",
"primaryContainer": "#2f5f36",
"secondary": "#94e2d5",
"surfaceTint": "#2b382c"
},
"name": "Green"
},
{
"frappe": {
"primary": "#81c8be",
"primaryText": "#303446",
"primaryContainer": "#2c5853",
"secondary": "#99d1db",
"surfaceTint": "#2a3634"
},
"id": "teal",
"latte": {
"primary": "#179299",
"primaryText": "#eff1f5",
"primaryContainer": "#daf3f1",
"secondary": "#04a5e5",
"surfaceTint": "#daf3f1"
},
"macchiato": {
"primary": "#8bd5ca",
"primaryText": "#24273a",
"primaryContainer": "#2d5b56",
"secondary": "#91d7e3",
"surfaceTint": "#2b3735"
},
"mocha": {
"primary": "#94e2d5",
"primaryText": "#1e1e2e",
"primaryContainer": "#2e5e59",
"secondary": "#89dceb",
"surfaceTint": "#2b3836"
},
"name": "Teal"
},
{
"frappe": {
"primary": "#99d1db",
"primaryText": "#303446",
"primaryContainer": "#245464",
"secondary": "#85c1dc",
"surfaceTint": "#283438"
},
"id": "sky",
"latte": {
"primary": "#04a5e5",
"primaryText": "#eff1f5",
"primaryContainer": "#dbf1fb",
"secondary": "#209fb5",
"surfaceTint": "#dbf1fb"
},
"macchiato": {
"primary": "#91d7e3",
"primaryText": "#24273a",
"primaryContainer": "#245667",
"secondary": "#7dc4e4",
"surfaceTint": "#293539"
},
"mocha": {
"primary": "#89dceb",
"primaryText": "#1e1e2e",
"primaryContainer": "#24586a",
"secondary": "#74c7ec",
"surfaceTint": "#29363a"
},
"name": "Sky"
},
{
"frappe": {
"primary": "#85c1dc",
"primaryText": "#303446",
"primaryContainer": "#1f4967",
"secondary": "#8caaee",
"surfaceTint": "#27323a"
},
"id": "sapphire",
"latte": {
"primary": "#209fb5",
"primaryText": "#eff1f5",
"primaryContainer": "#def3f8",
"secondary": "#1e66f5",
"surfaceTint": "#def3f8"
},
"macchiato": {
"primary": "#7dc4e4",
"primaryText": "#24273a",
"primaryContainer": "#1f4b6b",
"secondary": "#8aadf4",
"surfaceTint": "#27333b"
},
"mocha": {
"primary": "#74c7ec",
"primaryText": "#1e1e2e",
"primaryContainer": "#1f4d6f",
"secondary": "#89b4fa",
"surfaceTint": "#27343c"
},
"name": "Sapphire"
},
{
"frappe": {
"primary": "#8caaee",
"primaryText": "#303446",
"primaryContainer": "#243d6f",
"secondary": "#babbf1",
"surfaceTint": "#282f3b"
},
"id": "blue",
"latte": {
"primary": "#1e66f5",
"primaryText": "#eff1f5",
"primaryContainer": "#e0e9ff",
"secondary": "#7287fd",
"surfaceTint": "#e0e9ff"
},
"macchiato": {
"primary": "#8aadf4",
"primaryText": "#24273a",
"primaryContainer": "#243e72",
"secondary": "#b7bdf8",
"surfaceTint": "#29303c"
},
"mocha": {
"primary": "#89b4fa",
"primaryText": "#1e1e2e",
"primaryContainer": "#243f75",
"secondary": "#b4befe",
"surfaceTint": "#29313d"
},
"name": "Blue"
},
{
"frappe": {
"primary": "#babbf1",
"primaryText": "#303446",
"primaryContainer": "#3d427b",
"secondary": "#ca9ee6",
"surfaceTint": "#2e2f3e"
},
"id": "lavender",
"latte": {
"primary": "#7287fd",
"primaryText": "#eff1f5",
"primaryContainer": "#e5e8ff",
"secondary": "#8839ef",
"surfaceTint": "#e5e8ff"
},
"macchiato": {
"primary": "#b7bdf8",
"primaryText": "#24273a",
"primaryContainer": "#3e437e",
"secondary": "#c6a0f6",
"surfaceTint": "#2f303f"
},
"mocha": {
"primary": "#b4befe",
"primaryText": "#1e1e2e",
"primaryContainer": "#3f4481",
"secondary": "#cba6f7",
"surfaceTint": "#2f3140"
},
"name": "Lavender"
}
]
},
"sourceDir": "catppuccin"
}

View File

@ -0,0 +1,664 @@
{
config,
color,
}: {
enable = true;
systemd = {
enable = false;
restartIfChanged = true;
};
# Deprecated
# enableClipboard = true;
# enableBrightnessControl = false;
# enableColorPicker = true;
# enableSystemSound = false;
enableSystemMonitoring = true;
enableVPN = true;
enableDynamicTheming = false;
enableAudioWavelength = true;
enableCalendarEvents = false;
niri = {
enableKeybinds = false;
enableSpawn = false;
};
# This is generated from the DMS settings dialog.
# Run: nix eval --impure --expr 'builtins.fromJSON (builtins.readFile ~/.config/DankMaterialShell/settings.json)'
settings = {
acLockTimeout = 0;
acMonitorTimeout = 0;
acProfileName = "";
acSuspendBehavior = 0;
acSuspendTimeout = 0;
activeDisplayProfile = {};
animationSpeed = 1;
appDrawerSectionViewModes = {};
appIdSubstitutions = [
{
pattern = "Spotify";
replacement = "spotify";
type = "exact";
}
{
pattern = "beepertexts";
replacement = "beeper";
type = "exact";
}
{
pattern = "home assistant desktop";
replacement = "homeassistant-desktop";
type = "exact";
}
{
pattern = "com.transmissionbt.transmission";
replacement = "transmission-gtk";
type = "contains";
}
{
pattern = "^steam_app_(\\d+)$";
replacement = "steam_icon_$1";
type = "regex";
}
];
appLauncherGridColumns = 4;
appLauncherViewMode = "list";
appPickerViewMode = "grid";
appsDockActiveColorMode = "primary";
appsDockColorizeActive = false;
appsDockEnlargeOnHover = false;
appsDockEnlargePercentage = 125;
appsDockHideIndicators = false;
appsDockIconSizePercentage = 100;
audioInputDevicePins = {};
audioOutputDevicePins = {};
audioScrollMode = "volume";
audioVisualizerEnabled = true;
audioWheelScrollAmount = 5;
barConfigs = [
{
autoHide = false;
autoHideDelay = 250;
borderColor = "surfaceText";
borderEnabled = false;
borderOpacity = 1;
borderThickness = 2;
bottomGap = 0;
centerWidgets = [
{
enabled = true;
id = "music";
mediaSize = 1;
}
];
enabled = true;
fontScale = 1.1;
gothCornerRadiusOverride = false;
gothCornerRadiusValue = 12;
gothCornersEnabled = false;
id = "default";
innerPadding = 4;
leftWidgets = [
{
enabled = true;
id = "launcherButton";
}
{
enabled = true;
id = "workspaceSwitcher";
}
{
enabled = true;
focusedWindowCompactMode = true;
id = "focusedWindow";
}
];
maximizeDetection = true;
name = "Main Bar";
noBackground = false;
openOnOverview = true;
popupGapsAuto = true;
popupGapsManual = 4;
position = 0;
rightWidgets = [
{
enabled = true;
id = "privacyIndicator";
}
{
enabled = true;
id = "cpuUsage";
minimumWidth = true;
}
{
enabled = true;
id = "memUsage";
minimumWidth = true;
}
{
enabled = true;
id = "diskUsage";
}
{
enabled = true;
id = "colorPicker";
}
{
enabled = true;
id = "clipboard";
}
{
enabled = true;
id = "vpn";
}
{
enabled = true;
id = "controlCenterButton";
}
{
enabled = true;
id = "systemTray";
}
{
clockCompactMode = true;
enabled = true;
id = "clock";
}
{
enabled = true;
id = "notificationButton";
}
];
screenPreferences = ["all"];
showOnLastDisplay = true;
spacing = 0;
squareCorners = true;
transparency = 1;
visible = true;
widgetOutlineColor = "primary";
widgetOutlineEnabled = false;
widgetOutlineOpacity = 1;
widgetOutlineThickness = 2;
widgetTransparency = 1;
}
];
barMaxVisibleApps = 0;
barMaxVisibleRunningApps = 0;
barShowOverflowBadge = true;
batteryChargeLimit = 100;
batteryLockTimeout = 0;
batteryMonitorTimeout = 0;
batteryProfileName = "";
batterySuspendBehavior = 0;
batterySuspendTimeout = 0;
bluetoothDevicePins = {};
blurWallpaperOnOverview = true;
blurredWallpaperLayer = true;
brightnessDevicePins = {};
browserPickerViewMode = "grid";
browserUsageHistory = {};
builtInPluginSettings = {dms_settings_search = {trigger = "?";};};
buttonColorMode = "primary";
centeringMode = "index";
clipboardEnterToPaste = false;
clockCompactMode = false;
clockDateFormat = "yyyy-MM-dd";
configVersion = 5;
controlCenterShowAudioIcon = true;
controlCenterShowAudioPercent = false;
controlCenterShowBatteryIcon = false;
controlCenterShowBluetoothIcon = true;
controlCenterShowBrightnessIcon = false;
controlCenterShowBrightnessPercent = false;
controlCenterShowMicIcon = true;
controlCenterShowMicPercent = false;
controlCenterShowNetworkIcon = true;
controlCenterShowPrinterIcon = false;
controlCenterShowScreenSharingIcon = true;
controlCenterShowVpnIcon = true;
controlCenterTileColorMode = "primary";
controlCenterWidgets = [
{
enabled = true;
id = "volumeSlider";
width = 50;
}
{
enabled = true;
id = "brightnessSlider";
width = 50;
}
{
enabled = true;
id = "wifi";
width = 50;
}
{
enabled = true;
id = "bluetooth";
width = 50;
}
{
enabled = true;
id = "audioOutput";
width = 50;
}
{
enabled = true;
id = "audioInput";
width = 50;
}
{
enabled = true;
id = "nightMode";
width = 50;
}
{
enabled = true;
id = "darkMode";
width = 50;
}
];
cornerRadius = 10;
currentThemeCategory = "registry";
currentThemeName = "custom";
cursorSettings = {
dwl = {cursorHideTimeout = 0;};
hyprland = {
hideOnKeyPress = false;
hideOnTouch = false;
inactiveTimeout = 0;
};
niri = {
hideAfterInactiveMs = 0;
hideWhenTyping = false;
};
size = 24;
theme = "System Default";
};
customAnimationDuration = 500;
customPowerActionHibernate = "";
customPowerActionLock = "";
customPowerActionLogout = "";
customPowerActionPowerOff = "";
customPowerActionReboot = "";
customPowerActionSuspend = "";
customThemeFile = "/home/christoph/NixFlake/config/dankmaterialshell/catppuccin-mauve.json";
dankLauncherV2BorderColor = "primary";
dankLauncherV2BorderEnabled = false;
dankLauncherV2BorderThickness = 2;
dankLauncherV2ShowFooter = true;
dankLauncherV2Size = "compact";
dankLauncherV2UnloadOnClose = false;
desktopClockColorMode = "primary";
desktopClockCustomColor = {
a = 1;
b = 1;
g = 1;
hslHue = -1;
hslLightness = 1;
hslSaturation = 0;
hsvHue = -1;
hsvSaturation = 0;
hsvValue = 1;
r = 1;
valid = true;
};
desktopClockDisplayPreferences = ["all"];
desktopClockEnabled = false;
desktopClockHeight = 180;
desktopClockShowAnalogNumbers = false;
desktopClockShowAnalogSeconds = true;
desktopClockShowDate = true;
desktopClockStyle = "analog";
desktopClockTransparency = 0.8;
desktopClockWidth = 280;
desktopClockX = -1;
desktopClockY = -1;
desktopWidgetGridSettings = {};
desktopWidgetGroups = [];
desktopWidgetInstances = [];
desktopWidgetPositions = {};
displayNameMode = "system";
displayProfileAutoSelect = false;
displayProfiles = {};
displayShowDisconnected = false;
displaySnapToEdge = true;
dockAutoHide = false;
dockBorderColor = "surfaceText";
dockBorderEnabled = false;
dockBorderOpacity = 1;
dockBorderThickness = 1;
dockBottomGap = 0;
dockGroupByApp = false;
dockIconSize = 40;
dockIndicatorStyle = "circle";
dockIsolateDisplays = false;
dockLauncherEnabled = false;
dockLauncherLogoBrightness = 0.5;
dockLauncherLogoColorOverride = "";
dockLauncherLogoContrast = 1;
dockLauncherLogoCustomPath = "";
dockLauncherLogoMode = "apps";
dockLauncherLogoSizeOffset = 0;
dockMargin = 0;
dockMaxVisibleApps = 0;
dockMaxVisibleRunningApps = 0;
dockOpenOnOverview = false;
dockPosition = 1;
dockShowOverflowBadge = true;
dockSmartAutoHide = false;
dockSpacing = 4;
dockTransparency = 1;
dwlShowAllTags = false;
enableFprint = false;
enableRippleEffects = true;
enabledGpuPciIds = [];
fadeToDpmsEnabled = true;
fadeToDpmsGracePeriod = 5;
fadeToLockEnabled = true;
fadeToLockGracePeriod = 5;
filePickerUsageHistory = {};
focusedWindowCompactMode = false;
fontFamily = "MonoLisa Normal";
fontScale = 1;
fontWeight = 500;
groupWorkspaceApps = true;
gtkThemingEnabled = false;
hideBrightnessSlider = false;
hyprlandLayoutBorderSize = -1;
hyprlandLayoutGapsOverride = -1;
hyprlandLayoutRadiusOverride = -1;
hyprlandOutputSettings = {};
iconTheme = "System Default";
keyboardLayoutNameCompactMode = false;
launchPrefix = "";
launcherLogoBrightness = 0.5;
launcherLogoColorInvertOnMode = false;
launcherLogoColorOverride = "";
launcherLogoContrast = 1;
launcherLogoCustomPath = "";
launcherLogoMode = "os";
launcherLogoSizeOffset = 0;
launcherPluginOrder = [];
launcherPluginVisibility = {};
lockAtStartup = false;
lockBeforeSuspend = false;
lockDateFormat = "yyyy-MM-dd";
lockScreenActiveMonitor = "all";
lockScreenInactiveColor = "#000000";
lockScreenNotificationMode = 0;
lockScreenPowerOffMonitorsOnLock = false;
lockScreenShowDate = true;
lockScreenShowMediaPlayer = true;
lockScreenShowPasswordField = true;
lockScreenShowPowerActions = true;
lockScreenShowProfileImage = true;
lockScreenShowSystemIcons = true;
lockScreenShowTime = true;
loginctlLockIntegration = true;
mangoLayoutBorderSize = -1;
mangoLayoutGapsOverride = -1;
mangoLayoutRadiusOverride = -1;
matugenScheme = "scheme-tonal-spot";
matugenTargetMonitor = "";
matugenTemplateAlacritty = true;
matugenTemplateDgop = true;
matugenTemplateEmacs = true;
matugenTemplateEquibop = true;
matugenTemplateFirefox = true;
matugenTemplateFoot = true;
matugenTemplateGhostty = true;
matugenTemplateGtk = true;
matugenTemplateHyprland = true;
matugenTemplateKcolorscheme = true;
matugenTemplateKitty = true;
matugenTemplateMangowc = true;
matugenTemplateNeovim = true;
matugenTemplateNiri = true;
matugenTemplatePywalfox = true;
matugenTemplateQt5ct = true;
matugenTemplateQt6ct = true;
matugenTemplateVesktop = true;
matugenTemplateVscode = true;
matugenTemplateWezterm = true;
matugenTemplateZenBrowser = true;
maxFprintTries = 15;
maxWorkspaceIcons = 3;
mediaSize = 1;
modalAnimationSpeed = 1;
modalCustomAnimationDuration = 150;
modalDarkenBackground = true;
monoFontFamily = "MonoLisa Normal";
networkPreference = "auto";
nightModeEnabled = false;
niriLayoutBorderSize = -1;
niriLayoutGapsOverride = -1;
niriLayoutRadiusOverride = -1;
niriOutputSettings = {};
niriOverviewOverlayEnabled = true;
notepadFontFamily = "";
notepadFontSize = 14;
notepadLastCustomTransparency = 0.7;
notepadShowLineNumbers = false;
notepadTransparencyOverride = -1;
notepadUseMonospace = true;
notificationAnimationSpeed = 1;
notificationCompactMode = false;
notificationCustomAnimationDuration = 400;
notificationHistoryEnabled = true;
notificationHistoryMaxAgeDays = 7;
notificationHistoryMaxCount = 50;
notificationHistorySaveCritical = true;
notificationHistorySaveLow = true;
notificationHistorySaveNormal = true;
notificationOverlayEnabled = false;
notificationPopupPosition = 0;
notificationPopupPrivacyMode = false;
notificationPopupShadowEnabled = true;
notificationRules = [];
notificationTimeoutCritical = 0;
notificationTimeoutLow = 5000;
notificationTimeoutNormal = 5000;
osdAlwaysShowValue = true;
osdAudioOutputEnabled = true;
osdBrightnessEnabled = true;
osdCapsLockEnabled = true;
osdIdleInhibitorEnabled = true;
osdMediaPlaybackEnabled = true;
osdMediaVolumeEnabled = true;
osdMicMuteEnabled = true;
osdPosition = 7;
osdPowerProfileEnabled = false;
osdVolumeEnabled = true;
padHours12Hour = false;
popoutAnimationSpeed = 1;
popoutCustomAnimationDuration = 150;
popupTransparency = 1;
powerActionConfirm = true;
powerActionHoldDuration = 0.5;
powerMenuActions = ["reboot" "logout" "poweroff" "lock" "restart"];
powerMenuDefaultAction = "poweroff";
powerMenuGridLayout = false;
privacyShowCameraIcon = false;
privacyShowMicIcon = false;
privacyShowScreenShareIcon = false;
qtThemingEnabled = false;
registryThemeVariants = {};
reverseScrolling = false;
runDmsMatugenTemplates = false;
runUserMatugenTemplates = false;
runningAppsCompactMode = true;
runningAppsCurrentMonitor = false;
runningAppsCurrentWorkspace = false;
runningAppsGroupByApp = false;
screenPreferences = {};
scrollTitleEnabled = true;
selectedGpuIndex = 0;
showBattery = false;
showCapsLockIndicator = false;
showClipboard = true;
showClock = true;
showControlCenterButton = true;
showCpuTemp = true;
showCpuUsage = true;
showDock = false;
showFocusedWindow = true;
showGpuTemp = false;
showLauncherButton = true;
showMemUsage = true;
showMusic = true;
showNotificationButton = true;
showOccupiedWorkspacesOnly = false;
showOnLastDisplay = {};
showPrivacyButton = false;
showSeconds = true;
showSystemTray = true;
showWeather = true;
showWorkspaceApps = false;
showWorkspaceIndex = false;
showWorkspaceName = false;
showWorkspacePadding = false;
showWorkspaceSwitcher = true;
sortAppsAlphabetically = false;
soundNewNotification = true;
soundPluggedIn = true;
soundVolumeChanged = true;
soundsEnabled = false;
spotlightCloseNiriOverview = true;
spotlightModalViewMode = "list";
spotlightSectionViewModes = {};
syncComponentAnimationSpeeds = true;
syncModeWithPortal = true;
systemMonitorColorMode = "primary";
systemMonitorCustomColor = {
a = 1;
b = 1;
g = 1;
hslHue = -1;
hslLightness = 1;
hslSaturation = 0;
hsvHue = -1;
hsvSaturation = 0;
hsvValue = 1;
r = 1;
valid = true;
};
systemMonitorDisplayPreferences = ["all"];
systemMonitorEnabled = false;
systemMonitorGpuPciId = "";
systemMonitorGraphInterval = 60;
systemMonitorHeight = 480;
systemMonitorLayoutMode = "auto";
systemMonitorShowCpu = true;
systemMonitorShowCpuGraph = true;
systemMonitorShowCpuTemp = true;
systemMonitorShowDisk = true;
systemMonitorShowGpuTemp = false;
systemMonitorShowHeader = true;
systemMonitorShowMemory = true;
systemMonitorShowMemoryGraph = true;
systemMonitorShowNetwork = true;
systemMonitorShowNetworkGraph = true;
systemMonitorShowTopProcesses = false;
systemMonitorTopProcessCount = 3;
systemMonitorTopProcessSortBy = "cpu";
systemMonitorTransparency = 0.8;
systemMonitorVariants = [];
systemMonitorWidth = 320;
systemMonitorX = -1;
systemMonitorY = -1;
terminalsAlwaysDark = false;
updaterCustomCommand = "";
updaterHideWidget = false;
updaterTerminalAdditionalParams = "";
updaterUseCustomCommand = false;
use24HourClock = true;
useAutoLocation = false;
useFahrenheit = false;
useSystemSoundTheme = false;
wallpaperFillMode = "Fill";
waveProgressEnabled = true;
weatherEnabled = true;
widgetBackgroundColor = "sc";
widgetColorMode = "default";
wifiNetworkPins = {};
windSpeedUnit = "kmh";
workspaceAppIconSizeOffset = 0;
workspaceColorMode = "default";
workspaceDragReorder = true;
workspaceFocusedBorderColor = "primary";
workspaceFocusedBorderEnabled = false;
workspaceFocusedBorderThickness = 2;
workspaceFollowFocus = false;
workspaceNameIcons = {};
workspaceOccupiedColorMode = "none";
workspaceScrolling = false;
workspaceUnfocusedColorMode = "default";
workspaceUrgentColorMode = "default";
};
session = {
# Settings
doNotDisturb = false;
isLightMode = false;
weatherHourlyDetailed = true;
# Night
nightModeAutoEnabled = true;
nightModeAutoMode = "time";
nightModeEnabled = true;
nightModeEndHour = 6;
nightModeEndMinute = 0;
nightModeHighTemperature = 6500;
nightModeLocationProvider = "";
nightModeStartHour = 22;
nightModeStartMinute = 0;
nightModeTemperature = 5500;
nightModeUseIPLocation = false;
# Hardware
nonNvidiaGpuTempEnabled = false;
nvidiaGpuTempEnabled = false;
selectedGpuIndex = 0;
wifiDeviceOverride = "";
enabledGpuPciIds = [];
lastBrightnessDevice = "";
# Wallpapers
perModeWallpaper = false;
perMonitorWallpaper = false;
wallpaperCyclingEnabled = false;
wallpaperCyclingInterval = 300;
wallpaperCyclingMode = "interval";
wallpaperCyclingTime = "06:00";
wallpaperPath = "/home/christoph/NixFlake/wallpapers/Windows.jpg";
wallpaperPathDark = "";
wallpaperPathLight = "";
wallpaperTransition = "iris bloom";
# Random shit
includedTransitions = ["fade" "wipe" "disc" "stripes" "iris bloom" "pixelate" "portal"];
launchPrefix = "";
latitude = 0;
longitude = 0;
pinnedApps = [];
hiddenTrayIds = [];
recentColors = [];
showThirdPartyPlugins = true;
# Ultra random shit
monitorCyclingSettings = {};
monitorWallpapers = {};
monitorWallpapersDark = {};
monitorWallpapersLight = {};
brightnessExponentValues = {};
brightnessExponentialDevices = {};
brightnessUserSetValues = {};
configVersion = 1;
};
}

View File

@ -1,5 +1,6 @@
{color}: {
enable = true;
enable = false;
settings = {
# configure noctalia here; defaults will
# be deep merged with these attributes.

View File

@ -8,9 +8,9 @@
}:
with lib;
with mylib.modules; let
cfg = config.modules.ranger;
cfg = config.homemodules.ranger;
in {
options.modules.ranger = import ./options.nix {inherit lib mylib;};
options.homemodules.ranger = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
home.packages = with pkgs;

View File

@ -0,0 +1,34 @@
{
config,
nixosConfig,
lib,
mylib,
pkgs,
...
}: let
inherit (config.homemodules) bat color;
in {
options.homemodules.bat = import ./options.nix {inherit lib mylib;};
config = lib.mkIf bat.enable {
programs.bat = {
enable = true;
themes = {
catppuccin-latte = {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "bat";
rev = "ba4d16880d63e656acced2b7d4e034e4a93f74b1";
sha256 = "sha256-6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw=";
};
file = "Catppuccin-latte.tmTheme";
};
};
config = {
theme = "catppuccin-latte";
};
};
};
}

View File

@ -0,0 +1,7 @@
{
lib,
mylib,
...
}: {
enable = lib.mkEnableOption "Enable bat";
}

View File

@ -6,9 +6,9 @@
pkgs,
...
}: let
inherit (config.modules) beets;
inherit (config.homemodules) beets;
in {
options.modules.beets = import ./options.nix {inherit lib mylib;};
options.homemodules.beets = import ./options.nix {inherit lib mylib;};
config = lib.mkIf beets.enable {
programs.beets = {
@ -57,7 +57,7 @@ in {
fetchart = {
auto = "yes";
sources = "filesystem coverart itunes amazon albumart"; # sources are queried in this order
sources = "*"; # sources are queried in this order
};
# lyrics = {

View File

@ -6,9 +6,9 @@
pkgs,
...
}: let
inherit (config.modules) btop color;
inherit (config.homemodules) btop color;
in {
options.modules.btop = import ./options.nix {inherit lib mylib;};
options.homemodules.btop = import ./options.nix {inherit lib mylib;};
config = lib.mkIf btop.enable {
programs.btop = {

View File

@ -0,0 +1,48 @@
{
config,
nixosConfig,
lib,
mylib,
pkgs,
...
}: let
inherit (config.homemodules) cava color;
in {
options.homemodules.cava = import ./options.nix {inherit lib mylib;};
config = lib.mkIf cava.enable {
programs.cava = {
enable = true;
settings = {
general = {
framerate = 60; # default 60
autosens = 1; # default 1
sensitivity = 100; # default 100
lower_cutoff_freq = 50; # not passed to cava if not provided
higher_cutoff_freq = 10000; # not passed to cava if not provided
};
smoothing = {
noise_reduction = 77; # default 77
monstercat = false; # default false
waves = false; # default false
};
color = {
# https://github.com/catppuccin/cava/blob/main/themes/latte-transparent.cava
gradient = 1;
gradient_color_1 = "'${color.hexS.teal}'";
gradient_color_2 = "'${color.hexS.sky}'";
gradient_color_3 = "'${color.hexS.sapphire}'";
gradient_color_4 = "'${color.hexS.blue}'";
gradient_color_5 = "'${color.hexS.mauve}'";
gradient_color_6 = "'${color.hexS.pink}'";
gradient_color_7 = "'${color.hexS.maroon}'";
gradient_color_8 = "'${color.hexS.red}'";
};
};
};
};
}

View File

@ -0,0 +1,7 @@
{
lib,
mylib,
...
}: {
enable = lib.mkEnableOption "Enable cava";
}

View File

@ -5,9 +5,9 @@
pkgs,
...
}: let
inherit (config.modules) chromium;
inherit (config.homemodules) chromium;
in {
options.modules.chromium = import ./options.nix {inherit lib mylib;};
options.homemodules.chromium = import ./options.nix {inherit lib mylib;};
config = lib.mkIf chromium.enable {
home.packages = with pkgs;

View File

@ -5,9 +5,9 @@
pkgs,
...
}: let
inherit (config.modules) color;
inherit (config.homemodules) color;
in {
options.modules.color = import ./options.nix {inherit lib mylib pkgs;};
options.homemodules.color = import ./options.nix {inherit lib mylib pkgs;};
config = {
home.packages = let
@ -59,7 +59,7 @@ in {
++ (lib.optionals color.installPackages color.extraPackages);
# This module sets its own options to the values specified in a colorscheme file.
modules.color = let
homemodules.color = let
scheme = import ./schemes/${color.scheme}.nix;
# Add the aliases

View File

@ -0,0 +1,25 @@
{inputs, ...}: {
imports = [
# My own HM modules
./bat
./btop
./color
./fastfetch
./fish
./git
./jellyfin-tui
./kitty
./lazygit
./neovim
./packages
./paths
./ssh
./terminal
./tmux
./yazi
# HM modules imported from the flake inputs
inputs.nixvim.homeModules.nixvim
inputs.textfox.homeManagerModules.default
];
}

View File

@ -3,40 +3,51 @@
# Obsolete modules are kept in "1_deprecated" for reference.
# My own HM modules
./bat
./beets
./btop
./cava
./chromium
./color
./docs
./fastfetch
./fcitx
./firefox
./fish
./git
./hyprland
./hyprpanel
./jellyfin-tui
./kitty
./lazygit
./mpd
./neovim
./niri
./nnn
./packages
./paths
./qutebrowser
./rmpc
./rofi
./waybar
./ssh
./terminal
./tmux
./vscode
./yazi
./zathura
./zed
# HM modules imported from the flake inputs
inputs.nix-flatpak.homeManagerModules.nix-flatpak
inputs.nixvim.homeModules.nixvim
inputs.textfox.homeManagerModules.default
inputs.walker.homeManagerModules.default
# inputs.direnv-instant.homeModules.direnv-instant
# inputs.niri.homeModules.niri # Imported by system module
inputs.noctalia.homeModules.default
inputs.caelestia.homeManagerModules.default
# inputs.dankMaterialShell.homeModules.dankMaterialShell.default
# inputs.dankMaterialShell.homeModules.dankMaterialShell.niri
# inputs.noctalia.homeModules.default
# inputs.caelestia.homeManagerModules.default
# inputs.dank-material-shell.homeModules.dank-material-shell
# inputs.dank-material-shell.homeModules.niri
# inputs.danksearch.homeModules.default
# NOTE: Do NOT use this, use the system module (the HM module has to rely on fuse)
# inputs.impermanence.homeManagerModules.impermanence

View File

@ -5,9 +5,9 @@
pkgs,
...
}: let
inherit (config.modules) docs;
inherit (config.homemodules) docs;
in {
options.modules.docs = import ./options.nix {inherit lib mylib;};
options.homemodules.docs = import ./options.nix {inherit lib mylib;};
config = lib.mkIf docs.enable {
home = {
@ -32,6 +32,9 @@ in {
"Notes/Obsidian/Chriphost/latex_snippets.json".source = ../../../config/obsidian/latex_snippets.json; # TODO: Symlink
"Notes/Obsidian/Chriphost/.obsidian/snippets/latex_preview.css".source = ../../../config/obsidian/css_snippets/latex_preview.css;
"Notes/Obsidian/Chriphost/.obsidian/snippets/center_image.css".source = ../../../config/obsidian/css_snippets/center_image.css;
"Notes/Obsidian/Chriphost/.obsidian/snippets/fullwidth_image.css".source = ../../../config/obsidian/css_snippets/fullwidth_image.css;
"Notes/Obsidian/Chriphost/.obsidian/snippets/justify_text.css".source = ../../../config/obsidian/css_snippets/justify_text.css;
"Notes/Obsidian/Chriphost/.obsidian/snippets/bordered_image.css".source = ../../../config/obsidian/css_snippets/bordered_image.css;
};
};
};

View File

@ -0,0 +1,163 @@
{
config,
nixosConfig,
lib,
mylib,
pkgs,
...
}: let
inherit (config.homemodules) fastfetch color;
in {
options.homemodules.fastfetch = import ./options.nix {inherit lib mylib;};
config = lib.mkIf fastfetch.enable {
programs.fastfetch = {
enable = true;
settings = {
logo = {
padding = {
top = 4;
left = 1;
right = 2;
};
};
display = {
separator = "";
key.width = 17;
};
# Box Drawing: ╭ ─ ╮ ╰ ╯ │
modules = [
# Title
{
type = "title";
format = "{#1} {#}{user-name-colored}";
}
# System Information
{
type = "custom";
format = "{#1} {#}System Information";
}
{
type = "os";
key = "{#separator} {#keys}󰍹 OS";
}
{
type = "kernel";
key = "{#separator} {#keys}󰒋 Kernel";
}
{
type = "bootmgr";
key = "{#separator} {#keys}󰒋 BootMGR";
}
{
type = "uptime";
key = "{#separator} {#keys}󰅐 Uptime";
}
{
type = "packages";
key = "{#separator} {#keys}󰏖 Packages";
# format = "{all}";
}
{
type = "custom";
format = "{#1}";
}
# Desktop Environment
{
type = "custom";
format = "{#1} {#}Desktop Environment";
}
{
type = "de";
key = "{#separator} {#keys}󰧨 DE";
}
{
type = "wm";
key = "{#separator} {#keys}󱂬 WM";
}
{
type = "wmtheme";
key = "{#separator} {#keys}󰉼 Theme";
}
{
type = "display";
key = "{#separator} {#keys}󰹑 Resolution";
}
{
type = "shell";
key = "{#separator} {#keys}󰞷 Shell";
}
{
type = "terminalfont";
key = "{#separator} {#keys}󰛖 Font";
}
{
type = "icons";
key = "{#separator} {#keys} Icons";
}
{
type = "cursor";
key = "{#separator} {#keys}󰆽 Cursor";
}
{
type = "custom";
format = "{#1}";
}
# Hardware Information
{
type = "custom";
format = "{#1} {#}Hardware Information";
}
{
type = "board";
key = "{#separator} {#keys} Board";
}
{
type = "cpu";
key = "{#separator} {#keys}󰻠 CPU";
}
{
type = "gpu";
key = "{#separator} {#keys}󰢮 GPU";
}
{
type = "memory";
key = "{#separator} {#keys}󰍛 Memory";
}
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (/)";
# folders = "/";
# }
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (~/Games)";
# folders = "/home/christoph/Games";
# }
{
type = "btrfs";
key = "{#separator} {#keys}󰋊 BTRFS";
}
{
type = "custom";
format = "{#1}";
}
# Colors Footer
{
type = "colors";
key = "{#separator} {#1}";
keyWidth = 6;
symbol = "circle";
}
];
};
};
};
}

View File

@ -0,0 +1,7 @@
{
lib,
mylib,
...
}: {
enable = lib.mkEnableOption "Enable fastfetch";
}

Some files were not shown because too many files have changed in this diff Show More