160 Commits

Author SHA1 Message Date
0f07029660 Add openconnect plugin to networkmanager
Some checks failed
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-10 17:50:34 +02:00
8010d771a1 builder: add gitlab-runner
Some checks failed
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-09 21:34:52 +02:00
7f4c41429e update flake
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-07-04 14:44:51 +02:00
6d21fe4262 format code 2025-07-04 14:44:31 +02:00
c081f95aaf open-messaging: adapt to new telegram program name 2025-07-04 14:44:01 +02:00
452a34c7e8 Neovim: add clangd 2025-07-04 14:43:51 +02:00
15c4616b91 Fix emacs not having TERMINAL env var 2025-07-04 14:43:45 +02:00
07274a0364 Update alacritty config, use as default 2025-07-04 14:41:58 +02:00
3bb8db1349 Fix builder using itself as remote subsituter 2025-07-04 14:40:58 +02:00
65a3dcdc08 Use ghostty as primary terminal
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2025-06-30 08:37:24 +02:00
9fe40bfd13 package rtklib 2025-05-26 21:51:07 +02:00
07943d4f95 format file
Some checks failed
Update Nix Flake / update-flake (push) Failing after 12s
2025-05-23 09:59:30 +02:00
815a79ff41 kardorf: fix seahorse and plasma6 config conflict 2025-05-23 09:58:59 +02:00
32ddceba8f kardorf: use i3 instead of hyprland 2025-05-23 09:58:38 +02:00
55ba4125d6 add latex packages to fix org mode exporting
Some checks failed
Update Nix Flake / update-flake (push) Failing after 11s
2025-05-21 23:01:09 +02:00
b9274f546f update flake 2025-05-21 23:01:03 +02:00
fd246d7daf Add hydra-auto-upgrade module, still wip
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2025-05-16 13:13:47 +02:00
edae0d2bb0 Delete i3 scripts also available in my nix pkgs 2025-05-16 12:56:22 +02:00
1cb23dd0a4 Add todo 2025-05-16 12:53:20 +02:00
ab1052193a rename deprecated options 2025-05-16 12:12:22 +02:00
6dadb2008c kardorf: enable ssh access 2025-05-16 12:11:45 +02:00
18f9cc3fa8 Add user julian to dialout for serial port access 2025-05-16 08:27:45 +02:00
9295ad7010 add kardorf ssh key to common secrets.yaml 2025-05-16 08:27:45 +02:00
e3cf2379ab yazi: update config to new version 2025-05-16 08:27:45 +02:00
f6c3f676b2 update flake 2025-05-16 08:27:45 +02:00
d57017382a v3ms: add /snap/bin to path
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-09 11:41:21 +02:00
1d7690eab4 Fix mako settings
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-06 07:50:35 +02:00
67d68a9946 Fix waybar not visible on second monitor after toggling mirroring twice
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-05 15:10:07 +02:00
9af362b5c8 hyprland: quick and dirty screen mirroring 2025-05-05 14:56:22 +02:00
a0ae09452f hyprland: install hyprpicker 2025-05-05 08:24:26 +02:00
711859e660 hyprland: fix cursor theme not applied 2025-05-05 08:24:09 +02:00
1c1e496425 use NH_FLAKE instead of FLAKE for nh 2025-05-05 07:11:28 +02:00
97229a521f Add discord to open-messaging 2025-05-05 07:11:02 +02:00
7d8190210b Mako: disable usage of deprecated config value
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-04 20:42:53 +02:00
a1dfeff98b topgrade: disable "update flake" step 2025-05-04 20:29:11 +02:00
9e512c2863 Update flake 2025-05-04 20:29:06 +02:00
136653b0fa Use hashed password for julian 2025-05-04 13:52:36 +02:00
75fb0f54ec Delete unused hyprland nixos config 2025-05-04 13:52:27 +02:00
a3282f3eb3 Configure kardorf host config 2025-05-04 13:52:13 +02:00
843dfb986d Fix type of monitor.workspaces 2025-05-04 13:51:54 +02:00
3eba0fe092 Make nvidia on kardorf work 2025-05-04 13:51:44 +02:00
fdc8b03d9b Add user wolfi 2025-05-04 13:51:22 +02:00
d86321cfe6 Add monitor configuration to aspi and kardorf homes 2025-05-04 13:51:00 +02:00
881c930fdb Fix wrong architectures used for v3ms and kardorf 2025-05-04 13:50:36 +02:00
dc3f9fe681 Add kardorf ssh key to sops 2025-05-04 13:50:23 +02:00
d73ff17327 Delete deprecated .dotter files 2025-05-04 13:49:24 +02:00
67468ba6fa Fix kardorf using aspi config 2025-05-01 22:09:02 +02:00
6d2a7f50df workflow: add git fetch before rebasing
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-30 13:15:25 +02:00
3cf8f19fcc Disable autostart for wireguard comu
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-04-29 21:44:54 +02:00
d335f6c892 builder: fix config
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-28 22:44:33 +02:00
8d94428f77 Fix lsp warnings for clean code 2025-04-28 22:27:16 +02:00
903776dca6 Clean up aspi and home hm config 2025-04-28 22:24:30 +02:00
b6dc568215 Rename desktop feature to gtk 2025-04-28 22:24:21 +02:00
130c341816 Remove wallpaper directory 2025-04-28 22:23:42 +02:00
8d0430ae52 Delete unused config file for shells 2025-04-28 22:19:00 +02:00
68da077c72 Format code with alejandra 2025-04-28 22:17:11 +02:00
7d17c52192 Clean up aspi and kardorf configs 2025-04-28 22:02:24 +02:00
c217e3297b hyprland: enable direct_scanout 2025-04-28 09:14:47 +02:00
c41a642593 hyprland: add smart gaps 2025-04-28 09:14:35 +02:00
d02f28ad89 waybar: do not show time left for battery 2025-04-26 19:02:20 +02:00
7d18d2bd50 Properly configure swaylock 2025-04-25 15:42:09 +02:00
68c37c0f42 hyprland dwindle: always split to same direction 2025-04-25 15:04:58 +02:00
20e2b5e20e Disable mimeapp managing by hm 2025-04-25 15:04:50 +02:00
08d3844778 Add wol-ocr script 2025-04-25 15:04:39 +02:00
34084e45aa hyprland: make splitting and resizing deterministic 2025-04-25 08:41:16 +02:00
7c1c51954e Remove unneeded commented line 2025-04-25 08:36:24 +02:00
659d235fc7 Tune hyprland animations and cursor 2025-04-25 08:36:15 +02:00
64958b068f Delete unnecessary nixos wayland config 2025-04-24 14:06:32 +02:00
95d9f9cf61 Add gamemode 2025-04-24 14:06:27 +02:00
6f57594884 Fix hyprland 2025-04-24 13:41:09 +02:00
b077da4998 Add pob2 package, not working yet 2025-04-24 08:06:06 +02:00
8aaf0b81c2 Do not install digikam 2025-04-24 08:05:46 +02:00
439b4d769e Fix fonts 2025-04-24 08:05:39 +02:00
66bde6646f Remove unneccesary comments 2025-04-23 22:56:22 +02:00
c323a747ea Fix deprecated config 2025-04-23 22:55:20 +02:00
d87cec971a Migrate left hosts and homes configurations 2025-04-23 22:53:43 +02:00
7db055ca27 Squash bugs and make aspi config work 2025-04-23 09:59:02 +02:00
532bbe8675 Migrate old home-manager modules 2025-04-22 23:47:08 +02:00
dcdc97aad8 Migrate remaining nixos modules 2025-04-22 23:11:45 +02:00
94498a0038 Migrate aspi host config 2025-04-22 22:47:36 +02:00
05350e1c1c Add common hosts config 2025-04-22 22:12:45 +02:00
142b16fa9c Add aspi public ssh key 2025-04-22 22:12:30 +02:00
6f2de694a0 Add todos 2025-04-22 22:12:24 +02:00
3f9442fd02 Rename systems folder to hosts 2025-04-22 21:34:44 +02:00
fb2626372f Delete legacy non-nix configs 2025-04-22 21:30:30 +02:00
c18b1a7341 Add pkg to activate acer battery health mode 2025-04-22 21:30:05 +02:00
1e4d267ce7 delete lib 2025-04-22 21:25:44 +02:00
63c3d1af27 Add real home-manager and nixos modules 2025-04-22 21:24:36 +02:00
2e20534bba Rename modules/home to modules/home-manager 2025-04-22 21:19:29 +02:00
3f0b46f3d8 Update .gitignore 2025-04-22 21:15:27 +02:00
9659bbff1e Update lock file 2025-04-22 21:15:21 +02:00
73c440c9cd Add shell and direnv 2025-04-22 21:15:13 +02:00
d0942d018b Migrate packages 2025-04-22 21:14:51 +02:00
642398da4b Clean up overlays 2025-04-22 20:50:11 +02:00
07a321c79a Restructure flake 2025-04-22 20:48:18 +02:00
459c6ac27e Clean up flake inputs, use unstable by default 2025-04-22 20:41:04 +02:00
02cc4f8ed8 workflow: use rebase instead of merge
All checks were successful
Update Nix Flake / update-flake (push) Successful in 1m24s
2025-03-23 19:09:18 +01:00
d964a181ad builder: add attic binary cache
All checks were successful
Update Nix Flake / update-flake (push) Successful in 1m19s
2025-03-22 12:55:16 +01:00
27c36bb7f5 topgrade: update flake.lock to flake-updates branch version 2025-03-22 12:54:48 +01:00
b76fe8d508 workflow: really fix git diff call by using --cached 2025-03-22 09:20:48 +01:00
5c8f199fce workflow: add debug calls 2025-03-22 09:16:53 +01:00
00a448010d workflow: fix git diff call 2025-03-22 09:14:14 +01:00
b76da6e9eb workflow: use merge --squash instead of rebase 2025-03-22 09:05:43 +01:00
68e02739be fix gitea runner by using docker instead of podman
Some checks failed
Update Nix Flake / update-flake (push) Failing after 1m27s
2025-03-21 22:33:42 +01:00
b9b5b378f7 workflow: fix gitea token on checkout 2025-03-21 21:57:51 +01:00
1abc06f58c Add gitea action for updating flake 2025-03-21 21:46:05 +01:00
b3f3813b36 builder: configure gitea actions 2025-03-21 21:45:42 +01:00
56b471cdd4 Document sops usage in Readme 2025-03-21 21:45:26 +01:00
136dd36b8c Distribute secrets to machine configs 2025-03-21 21:45:08 +01:00
3f68d344d1 Add secrets for builder 2025-03-21 21:44:32 +01:00
df00e58bd9 Add sos script for faster nixos-updates
This uses the remote builder as nix store, so the build dependencies for
the new system do not have to be present locally.
Therefore, if hydra built the system it should be possible to just
download the output derivation.
2025-03-14 09:16:50 +01:00
4745b90cea Update flake 2025-03-12 17:10:56 +01:00
fef500721c emacs: add languagetool lsp 2025-03-12 17:10:46 +01:00
1921df8330 add devenv 2025-02-28 19:08:41 +01:00
8e64d3f8db pianonix: add musescore 2025-02-28 19:08:26 +01:00
8cc698af1f Update flake 2025-02-28 19:08:12 +01:00
533256cca6 Fix unstable overlay 2025-02-28 18:52:53 +01:00
5e224b9c3f Fix flake inputs being thunk instead of set
I turns out one should not handle the inputs section as nix code, or
weird things happen
2025-02-28 18:49:56 +01:00
ca0ad1b6d6 Remove hydra jobs 2025-02-28 18:24:42 +01:00
8dfa9a8df7 desktop suite: add pdfpc 2025-01-21 21:33:52 +01:00
167a9d57d7 v3ms: add devbox 2025-01-21 12:03:29 +01:00
87809a9573 Fix wine only supporting 32-bit 2025-01-20 18:15:11 +01:00
d67c432be6 Update flake 2025-01-20 00:15:13 +01:00
49f3533f9e Add matlab-rsp script 2025-01-20 00:15:13 +01:00
c344ac92f6 pianonix: add xournalpp 2025-01-20 00:15:13 +01:00
7e848b8126 Enable syncthing on kardorf 2025-01-14 10:19:40 +01:00
e698f17557 Update flake 2025-01-10 22:27:05 +01:00
9907a4ba9e builder: disable daily gc, increase automatic gc thresholds 2025-01-10 22:26:11 +01:00
be2dc15a1f aspi: enable builder 2025-01-10 22:25:59 +01:00
ca3e257fa0 pianonix: add onboard screen keyboard 2025-01-10 22:25:47 +01:00
a6f2ad4d9f Again change kitty theme 2025-01-08 08:22:27 +01:00
338b77114c Update flake 2025-01-06 08:52:54 +01:00
0878a2f251 builder: Remove swap 2025-01-02 23:05:49 +01:00
e45837e785 Update flake 2025-01-02 22:57:21 +01:00
f832636ffd Builder: add kardorf ssh key 2025-01-02 22:57:10 +01:00
4f68e368b9 Make kitty use more mc friendly theme 2025-01-02 22:56:56 +01:00
4590c9fe1f builder: Improve garbage collect 2024-12-20 14:05:11 +01:00
22db460211 Try to fix hydra not using localhost buildMachine 2024-12-19 08:55:49 +01:00
5f2ab6958e emacs: add hunspell dicts 2024-12-18 15:50:15 +01:00
86c948779f Aspi allow non free nvidia drivers 2024-12-18 15:49:50 +01:00
9cb3f8eae9 Aspi use kitty instead of wezterm 2024-12-18 15:49:38 +01:00
b6dbe5afc7 Setup builder as cache and activate hydra 2024-12-18 15:48:58 +01:00
4c8a559c92 Activate resolved service which was missing 2024-12-18 15:47:40 +01:00
cec8d1d226 Use binarycache.julian-mutter.de by default 2024-12-18 15:46:34 +01:00
8dc346a1ef flake.lock: Update
Flake lock file updates:

• Updated input 'disko':
    'github:nix-community/disko/785c1e02c7e465375df971949b8dcbde9ec362e5?narHash=sha256-8dupm9GfK%2BBowGdQd7EHK5V61nneLfr9xR6sc5vtDi0%3D' (2024-12-02)
  → 'github:nix-community/disko/a08bfe06b39e94eec98dd089a2c1b18af01fef19?narHash=sha256-b7G8oFp0Nj01BYUJ6ENC9Qf/HsYAIZvN9k/p0Kg/PFU%3D' (2024-12-16)
• Updated input 'home-manager':
    'github:nix-community/home-manager/c7ffc9727d115e433fd884a62dc164b587ff651d?narHash=sha256-zjO6m5BqxXIyjrnUziAzk4%2BT4VleqjstNudSqWcpsHI%3D' (2024-12-07)
  → 'github:nix-community/home-manager/80b0fdf483c5d1cb75aaad909bd390d48673857f?narHash=sha256-vykpJ1xsdkv0j8WOVXrRFHUAdp9NXHpxdnn1F4pYgSw%3D' (2024-12-16)
• Updated input 'hyprland':
    'github:hyprwm/Hyprland/0a27af8cd190315c1f13363ebd11e83d30455d48?narHash=sha256-%2BtHGw4fimhZ9LtGUTpXV8V1EH5AWY6FC/3u5OmZ4I5A%3D' (2024-12-08)
  → 'github:hyprwm/Hyprland/5f1df55fcb45a72e92258113685aa9064f6ebf3e?narHash=sha256-eb%2BOcQaSp7pcJxNe6wi52AiqLle820aD4Ejq10wmsjo%3D' (2024-12-17)
• Updated input 'hyprland/aquamarine':
    'github:hyprwm/aquamarine/4468981c1c50999f315baa1508f0e53c4ee70c52?narHash=sha256-TGcvIjftziC1CjuiHCzrYDwmOoSFYIhdiKmLetzB5L0%3D' (2024-11-18)
  → 'github:hyprwm/aquamarine/a132fa41be7ebe797ad758e84d9df068151a723b?narHash=sha256-Bf%2Boya0BuleVXYGIWsb0eWnrK6s0aiesOsI7Mpj1pMU%3D' (2024-12-17)
• Updated input 'hyprland/hyprcursor':
    'github:hyprwm/hyprcursor/0264e698149fcb857a66a53018157b41f8d97bb0?narHash=sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk%3D' (2024-10-11)
  → 'github:hyprwm/hyprcursor/f388aacd22be4a6e4d634fbaf6f75eb0713d239a?narHash=sha256-%2B2bZJL2u5hva7rSp65OfKJBK%2Bk03T6GB/NCvpoS1OOo%3D' (2024-12-16)
• Updated input 'hyprland/hyprgraphics':
    'github:hyprwm/hyprgraphics/cc95e5babc6065bc3ab4cd195429a9900836ef13?narHash=sha256-FFLJzFTyNhS7tBEEECx0B8Ye/bpmxhFVEKlECgMLc6c%3D' (2024-12-03)
  → 'github:hyprwm/hyprgraphics/fb2c0268645a77403af3b8a4ce8fa7ba5917f15d?narHash=sha256-2kYREgmSmbLsmDpLEq96hxVAU3qz8aCvVhF65yCFZHY%3D' (2024-12-08)
• Updated input 'hyprland/hyprland-qtutils':
    'github:hyprwm/hyprland-qtutils/969427419276c7ee170301ef1ebe0f68eb6eb2e2?narHash=sha256-PvXiFLIExJEJj%2BgoLbIuXLTN5CSDSAUsAfiYSdbbWg0%3D' (2024-12-06)
  → 'github:hyprwm/hyprland-qtutils/3833097e50473a152dd614d4b468886840b4ea78?narHash=sha256-hmfXWj2GA9cj1QUkPFYtAAeohhs615zL4E3APy3FnvQ%3D' (2024-12-11)
• Updated input 'hyprland/hyprlang':
    'github:hyprwm/hyprlang/f054f2e44d6a0b74607a6bc0f52dba337a3db38e?narHash=sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns%3D' (2024-10-05)
  → 'github:hyprwm/hyprlang/16e59c1eb13d9fb6de066f54e7555eb5e8a4aba5?narHash=sha256-ii8fzJfI953n/EmIxVvq64ZAwhvwuuPHWfGd61/mJG8%3D' (2024-12-16)
• Updated input 'hyprland/hyprutils':
    'github:hyprwm/hyprutils/b26f33cc1c8a7fd5076e19e2cce3f062dca6351c?narHash=sha256-XTU9B53IjGeJiJ7LstOhuxcRjCOFkQFl01H78sT9Lg4%3D' (2024-11-22)
  → 'github:hyprwm/hyprutils/e6cf45cd1845368702e03b8912f4cc44ebba3322?narHash=sha256-bl3YyJb2CgaeVKYq/l8j27vKdbkTpDNFDsnCl0dnNlY%3D' (2024-12-16)
• Updated input 'hyprland/hyprwayland-scanner':
    'github:hyprwm/hyprwayland-scanner/500c81a9e1a76760371049a8d99e008ea77aa59e?narHash=sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM%3D' (2024-09-20)
  → 'github:hyprwm/hyprwayland-scanner/90e87f7fcfcce4862826d60332cbc5e2f87e1f88?narHash=sha256-noYeXcNQ15g1/gIJIYT2zdO66wzY5Z06PYz6BfKUZA8%3D' (2024-12-16)
• Updated input 'hyprland/nixpkgs':
    'github:NixOS/nixpkgs/d0797a04b81caeae77bcff10a9dde78bc17f5661?narHash=sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG%2BcBns%3D' (2024-12-05)
  → 'github:NixOS/nixpkgs/3566ab7246670a43abd2ffa913cc62dad9cdf7d5?narHash=sha256-AKU6qqskl0yf2%2BJdRdD0cfxX4b9x3KKV5RqA6wijmPM%3D' (2024-12-13)
• Updated input 'hyprland/pre-commit-hooks':
    'github:cachix/git-hooks.nix/6f4e2a2112050951a314d2733a994fbab94864c6?narHash=sha256-SVQVsbafSM1dJ4fpgyBqLZ%2BLft%2BjcQuMtEL3lQWx2Sk%3D' (2024-12-04)
  → 'github:cachix/git-hooks.nix/0bb4be58f21ff38fc3cdbd6c778eb67db97f0b99?narHash=sha256-Keu8z5VgT5gnCF4pmB%2Bg7XZFftHpfl4qOn7nqBcywdE%3D' (2024-12-16)
• Updated input 'hyprland/xdph':
    'github:hyprwm/xdg-desktop-portal-hyprland/fd85ef39369f95eed67fdf3f025e86916edeea2f?narHash=sha256-NetqJHAN4bbZDQADvpep%2BwXk2AbMZ2bN6tINz8Kpz6M%3D' (2024-12-02)
  → 'github:hyprwm/xdg-desktop-portal-hyprland/3e884d941ca819c1f2e50df8bdae0debded1ed87?narHash=sha256-0y7DRaXslhfqVKV8a/talYTYAe2NHOQhMZG7KMNRCtc%3D' (2024-12-17)
• Updated input 'hyprland-plugins':
    'github:hyprwm/hyprland-plugins/2530394e67b436f4aea8225111cf37c1403ccb78?narHash=sha256-5gCIIiQT9JlBPO1M98j1Aaboa2CTKtwBqiksCLf6qC0%3D' (2024-12-04)
  → 'github:hyprwm/hyprland-plugins/179fab73cd399982f5d37389fb307497eb65be45?narHash=sha256-i4dNTT6yR6Ob2hSMHOShm91zACUGzwMR8cdmIkPHiOY%3D' (2024-12-17)
• Updated input 'music-reader':
    'git+https://gitlab.julian-mutter.de/julian/music-reader?ref=refs/heads/master&rev=b7a1a6c07e7fd4235bbd00a66c727ff2fb3de841' (2024-12-08)
  → 'git+https://gitlab.julian-mutter.de/julian/music-reader?ref=refs/heads/master&rev=d63eb2b9d1aeef1d143bafd7706cd7ba45dc823d' (2024-12-08)
• Updated input 'nix-ld':
    'github:Mic92/nix-ld/1e17dfe486a0c4dc245f5177a7328930b8392b34?narHash=sha256-pVogdQb09YrbVyFrzadfF1fseT6W2We4lNKRvWPPHsY%3D' (2024-12-02)
  → 'github:Mic92/nix-ld/911665df070e3d6c970e5a248fc4a38550bd5689?narHash=sha256-BpJs2QnVwdE4Btsx2BcBmdsq86H7QJYv2GmoOkr1ii4%3D' (2024-12-16)
• Updated input 'nix-matlab':
    'gitlab:doronbehar/nix-matlab/61df20fe5adb6c227389ca81817732b47cc21db9?narHash=sha256-4SkYrx9BEeqI4OFW1W/5Ra67FM4piVAKkdv3tnMa6fc%3D' (2024-12-07)
  → 'gitlab:doronbehar/nix-matlab/45bd1ee7d0c4ca58fff29b0fe4f438faaa097d33?narHash=sha256-MxBgCrzGbG3P1fnAAaiwfGURAaZlRJnmE3uvbYtYcgU%3D' (2024-12-16)
• Updated input 'nix-topology':
    'github:oddlama/nix-topology/2b107e98bbde932a363874e0ef5b1739a932bbc5?narHash=sha256-xQO/3I99TFdiXTN5VoS28NpbNlCQWQUvxmPQHlfkzmU%3D' (2024-11-21)
  → 'github:oddlama/nix-topology/ba6f61e594a85eabebf1c8f373923b59b3b07448?narHash=sha256-k9P9Sa6jw/Xre8UDp7Ukk75h4Tcq8ZrK%2Bnz6A2MC1IM%3D' (2024-12-15)
• Updated input 'nixos-hardware':
    'github:NixOS/nixos-hardware/e563803af3526852b6b1d77107a81908c66a9fcf?narHash=sha256-IS3bxa4N1VMSh3/P6vhEAHQZecQ3oAlKCDvzCQSO5Is%3D' (2024-12-06)
  → 'github:NixOS/nixos-hardware/b12e314726a4226298fe82776b4baeaa7bcf3dcd?narHash=sha256-mfv%2BJ/vO4nqmIOlq8Y1rRW8hVsGH3M%2BI2ESMjhuebDs%3D' (2024-12-16)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/4dc2fc4e62dbf62b84132fe526356fbac7b03541?narHash=sha256-FillH0qdWDt/nlO6ED7h4cmN%2BG9uXwGjwmCnHs0QVYM%3D' (2024-12-05)
  → 'github:nixos/nixpkgs/394571358ce82dff7411395829aa6a3aad45b907?narHash=sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE%3D' (2024-12-16)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/4dc2fc4e62dbf62b84132fe526356fbac7b03541?narHash=sha256-FillH0qdWDt/nlO6ED7h4cmN%2BG9uXwGjwmCnHs0QVYM%3D' (2024-12-05)
  → 'github:nixos/nixpkgs/394571358ce82dff7411395829aa6a3aad45b907?narHash=sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE%3D' (2024-12-16)
• Updated input 'nixpkgs-unstable':
    'github:nixos/nixpkgs/22c3f2cf41a0e70184334a958e6b124fb0ce3e01?narHash=sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY%3D' (2024-12-07)
  → 'github:nixos/nixpkgs/d3c42f187194c26d9f0309a8ecc469d6c878ce33?narHash=sha256-cHar1vqHOOyC7f1%2BtVycPoWTfKIaqkoe1Q6TnKzuti4%3D' (2024-12-17)
• Updated input 'nixvim':
    'github:nix-community/nixvim/6395b9c013ba4de734334e5c927dec529e810d72?narHash=sha256-oJxMWR29rBT5howN587lMy6nKOiISyrfSJZg4gXPobc%3D' (2024-12-08)
  → 'github:nix-community/nixvim/4f0d5e0d2947dbf111f2ce00c99ca4c6c659dc79?narHash=sha256-APyzO3pn6iiGJxkWczifnxm3pKZrNYgpJUPpnVfUwsk%3D' (2024-12-17)
• Updated input 'nixvim/git-hooks':
    'github:cachix/git-hooks.nix/6f4e2a2112050951a314d2733a994fbab94864c6?narHash=sha256-SVQVsbafSM1dJ4fpgyBqLZ%2BLft%2BjcQuMtEL3lQWx2Sk%3D' (2024-12-04)
  → 'github:cachix/git-hooks.nix/d8c02f0ffef0ef39f6063731fc539d8c71eb463a?narHash=sha256-%2BXTFXYlFJBxohhMGLDpYdEnhUNdxN8dyTA8WAd%2Blh2A%3D' (2024-12-08)
• Updated input 'nixvim/home-manager':
    'github:nix-community/home-manager/c7ffc9727d115e433fd884a62dc164b587ff651d?narHash=sha256-zjO6m5BqxXIyjrnUziAzk4%2BT4VleqjstNudSqWcpsHI%3D' (2024-12-07)
  → 'github:nix-community/home-manager/1318c3f3b068cdcea922fa7c1a0a1f0c96c22f5f?narHash=sha256-Zb5ZCa7Xj%2B0gy5XVXINTSr71fCfAv%2BIKtmIXNrykT54%3D' (2024-12-11)
• Updated input 'nixvim/nuschtosSearch':
    'github:NuschtOS/search/68e9fad70d95d08156cf10a030bd39487bed8ffe?narHash=sha256-315rJ7O9cOllPDaFscnJhcMleORHbxon0Kq9LAKJ5p4%3D' (2024-12-05)
  → 'github:NuschtOS/search/3051be7f403bff1d1d380e4612f0c70675b44fc9?narHash=sha256-Y47y%2BLesOCkJaLvj%2BdI/Oa6FAKj/T9sKVKDXLNsViPw%3D' (2024-12-09)
• Updated input 'nixvim/treefmt-nix':
    'github:numtide/treefmt-nix/50862ba6a8a0255b87377b9d2d4565e96f29b410?narHash=sha256-qKL3vjO%2BIXFQ0nTinFDqNq/sbbnnS5bMI1y0xX215fU%3D' (2024-12-05)
  → 'github:numtide/treefmt-nix/0ce9d149d99bc383d1f2d85f31f6ebd146e46085?narHash=sha256-s4DalCDepD22jtKL5Nw6f4LP5UwoMcPzPZgHWjAfqbQ%3D' (2024-12-09)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/c6134b6fff6bda95a1ac872a2a9d5f32e3c37856?narHash=sha256-m6/qwJAJYcidGMEdLqjKzRIjapK4nUfMq7rDCTmZajc%3D' (2024-12-02)
  → 'github:Mic92/sops-nix/2d73fc6ac4eba4b9a83d3cb8275096fbb7ab4004?narHash=sha256-GZ4YtqkfyTjJFVCub5yAFWsHknG1nS/zfk7MuHht4Fs%3D' (2024-12-12)
2024-12-18 15:18:13 +01:00
26b92b38cb change flake input format 2024-12-08 23:02:16 +01:00
fe6df7942a Add hydraJobs to flake outputs 2024-12-08 22:32:35 +01:00
4eddc7fc67 Update flake 2024-12-08 22:32:13 +01:00
397b6bad7c v3ms: add mysql80 package 2024-12-02 10:43:07 +01:00
94bdd188d0 Update flake 2024-12-02 08:45:33 +01:00
6a047746c1 Yazi update shellAlias from ya to yy 2024-12-02 08:45:13 +01:00
1f3693359f Add config option to make terminal the default 2024-12-02 08:44:55 +01:00
ba70fd8553 Upgrade to nixos 24.11 2024-12-01 21:31:06 +01:00
bb48cf3ad0 update config of the builder module 2024-12-01 19:10:29 +01:00
84b1a60fea builder: try gpu computing but GPU doesnt support it 2024-12-01 19:02:57 +01:00
a38299888f pianonix: remove unneeded hardware config 2024-12-01 19:00:53 +01:00
425c8f8e4f Pianonix: fix screen going to sleep mode 2024-12-01 19:00:29 +01:00
b0acc7178d Setup VNC server on pianonix 2024-12-01 18:09:56 +01:00
4266574fa6 Add pob-dev-version package 2024-12-01 14:35:17 +01:00
6f595a97ec deploy-rs for builder: use remote building 2024-11-29 22:03:59 +01:00
268 changed files with 4512 additions and 5945 deletions

View File

@ -1,61 +0,0 @@
[helpers]
[default]
depends = []
[manjaro.files]
manjaro = "~"
[mc.files]
mc = "~/.config/mc"
[vim.files]
# type symbolic prevents interpreting '{{' as template
"vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" }
[nvim.files]
"vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" }
[i3.files]
"i3/i3" = "~/.config/i3"
"i3/i3blocks" = { target = "~/.config/i3blocks", type = "symbolic" }
"i3/rofi" = "~/.config/rofi"
"i3/i3-scrot.conf" = "~/.config/i3-scrot.conf"
"i3/i3status-rust" = "~/.config/i3status-rust"
"i3/.profile" = "~/.profile"
[i3.variables]
monitor-primary = "not-specified"
monitor-secondary = "not-specified"
screenlayout-script = "echo screenlayout-script not specified"
bar-font-size = 15
tray-output = "tray_output primary"
[emacs.files]
"emacs/doom" = "~/.config/doom"
# "emacs/spacemacs/.spacemacs" = "~/.spacemacs"
# "emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el"
[alacritty.files]
alacritty = "~/.config/alacritty"
[starship.files]
starship = "~/.config/"
[zsh.files]
"zsh/.zshrc" = "~/.zshrc"
"zsh/custom-plugins" = "~/.oh-my-zsh/custom"
[polybar.files]
polybar = "~/.config/polybar"
[leftwm.files]
leftwm = "~/.config/leftwm"
[xmonad.files]
xmonad = "~/.xmonad"
[nix.files]
"direnvrc" = "~/.config/direnv/direnvrc"
"nix/configuration.nix" = "/etc/nixos/configuration.nix"
"nix/flake.nix" = "/etc/nixos/flake.nix"

View File

@ -1,6 +0,0 @@
[i3.variables]
monitor-primary = "DVI-D-0"
monitor-secondary = "DVI-D-1"
screenlayout-script = "~/.screenlayout/2desktop-dvi.sh"
bar-font-size = 15
tray-output = "tray_output DVI-D-1"

View File

@ -1,4 +0,0 @@
[i3.variables]
monitor-primary = "HDMI-1"
monitor-secondary = "eDP-1"
screenlayout-script = "~/.screenlayout/laptop-at-home.sh"

View File

@ -1,5 +0,0 @@
[i3.variables]
monitor-primary = "HDMI-1"
monitor-secondary = "eDP-1"
tray-output = "tray_output eDP-1"
screenlayout-script = "$scripts/display-layoutpicker"

View File

@ -1,2 +0,0 @@
includes = [".dotter/kardorf.toml"]
packages = ["i3", "emacs", "alacritty", "zsh", "starship", "nix"]

View File

@ -1,2 +0,0 @@
includes = [".dotter/laptop.toml"]
packages = []

1
.envrc Normal file
View File

@ -0,0 +1 @@
use flake

View File

@ -0,0 +1,58 @@
name: Update Nix Flake
on:
schedule:
- cron: "30 0 * * *" # daily run
workflow_dispatch: {}
jobs:
update-flake:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: "${{ gitea.token }}"
fetch-depth: 0
ref: flake-updates
- name: Git config
shell: bash
run: |
git config user.name "Gitea Actions"
git config user.email "actions@gitea.local"
- name: Rebase from master branch
shell: bash
run: |
git fetch origin master
commits_ahead=$(git rev-list --count HEAD..origin/master)
echo "Commits ahead: $commits_ahead"
git log --oneline -5
echo "----------"
git log --oneline -5 origin/master
echo .
if [ $commits_ahead -ne 0 ]
then
git rebase -X theirs origin/master
git push --force-with-lease origin flake-updates
else
echo "Rebase not necessary"
fi
- name: Set up Nix
uses: cachix/install-nix-action@v31
- name: Update Flake
run: nix flake update
- name: Commit and push changes
shell: bash
run: |
git add flake.lock
git status
git diff --cached --quiet && echo "No changes to commit." && exit 0
git commit -m "Update flake.lock $(date -I)"
git push --force-with-lease origin flake-updates

8
.gitignore vendored
View File

@ -1,5 +1,3 @@
.dotter/cache.toml
.dotter/cache
.dotter/local.toml
nix/result
.direnv
result*
*.qcow2

View File

@ -2,10 +2,26 @@ keys:
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
creation_rules:
- path_regex: secrets/secrets.yaml$
- path_regex: hosts/common/secrets.yaml$
key_groups:
- age:
- *primary
- *aspi-ssh
- *pianonix-ssh
- *kardorf-ssh
- path_regex: hosts/builder/secrets.yaml$
key_groups:
- age:
- *primary
- *builder-ssh
- path_regex: hosts/pianonix/secrets.yaml$
key_groups:
- age:
- *primary
- *pianonix-ssh

View File

@ -12,3 +12,22 @@ The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowf
and [[file:flake.nix]] was symlinked to file:~/.config/home-manager/flake.nix
For deployment!!
* Secrets management with sops
Full documentation here: https://github.com/Mic92/sops-nix
** Edit secrets
#+begin_src sh
sops edit secrets/secrets.yaml
#+end_src
** Authorize new device
- Generate public key from ssh -> Private age key generation not needed
#+begin_src sh
ssh-to-age < /etc/ssh/ssh_host_ed25519_key
#+end_src
- Add age public key to file:.sops.yaml
- Update keys
#+begin_src sh
sops updatekeys secrets/*
#+end_src

1001
flake.lock generated

File diff suppressed because it is too large Load Diff

239
flake.nix
View File

@ -1,152 +1,187 @@
{
description = "Home Manager configuration of julian";
inputs = rec {
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs = nixpkgs-stable;
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
systems.url = "github:nix-systems/default-linux";
nixos-hardware.url = "github:nixos/nixos-hardware";
impermanence.url = "github:nix-community/impermanence";
nix-colors.url = "github:misterio77/nix-colors";
deploy-rs.url = "github:serokell/deploy-rs";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
snowfall-lib = {
url = "github:snowfallorg/lib";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gl = {
url = "github:nix-community/nixgl";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
alacritty-theme = {
url = "github:alacritty/alacritty-theme";
flake = false;
};
# Various flakes
yazi-flavors = {
url = "github:yazi-rs/flavors";
flake = false;
};
nixvim = {
url = "github:nix-community/nixvim/nixos-24.05";
# If using a stable channel you can use `url = "github:nix-community/nixvim/nixos-<version>"`
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-matlab = {
url = "gitlab:doronbehar/nix-matlab";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-matlab.url = "gitlab:doronbehar/nix-matlab";
nix-matlab.inputs.nixpkgs.follows = "nixpkgs";
sops-nix.url = "github:Mic92/sops-nix";
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
# hyprland.inputs.nixpkgs.follows = "nixpkgs";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
# My projects
sheet-organizer = {
url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
inputs.nixpkgs.follows = "nixpkgs";
};
music-reader = {
url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-colors.url = "github:Misterio77/nix-colors";
nix-topology.url = "github:oddlama/nix-topology";
nix-topology.inputs.nixpkgs.follows = "nixpkgs";
nix-ld.url = "github:Mic92/nix-ld";
nix-ld.inputs.nixpkgs.follows = "nixpkgs";
## My projects
sheet-organizer.url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
sheet-organizer.inputs.nixpkgs.follows = "nixpkgs";
music-reader.url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
music-reader.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
inputs:
inputs.snowfall-lib.mkFlake {
inherit inputs;
# Must always be ./.
src = ./.;
outputs = {
self,
nixpkgs,
home-manager,
systems,
...
} @ inputs: let
inherit (self) outputs;
lib = nixpkgs.lib // home-manager.lib;
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
pkgsFor = lib.genAttrs (import systems) (
system:
import nixpkgs {
inherit system;
config.allowUnfree = true;
config.permittedInsecurePackages = [
"olm-3.2.16"
];
warn-dirty = false;
}
);
in {
inherit lib;
# Add overlays for the `nixpkgs` channel.
overlays = with inputs; [
nix-matlab.overlay
nix-topology.overlays.default
];
nixosModules = import ./modules/nixos;
homeManagerModules = import ./modules/home-manager;
snowfall = {
# The root of the snowfall config
root = ./.;
# lib, package and overlay namespace
namespace = "frajul"; # defaults to "internal"
overlays = import ./overlays {inherit inputs outputs;};
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
meta = {
name = "Julian's dotfiles";
title = "Julian's dotfiles";
packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;});
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
formatter = forEachSystem (pkgs: pkgs.alejandra);
nixosConfigurations = {
# Main laptop
aspi = lib.nixosSystem {
modules = [./hosts/aspi];
specialArgs = {
inherit inputs outputs;
};
};
# The attribute set specified here will be passed directly to NixPkgs when
# instantiating the package set.
channels-config = {
# Allow unfree packages.
allowUnfree = true;
nvidia.acceptLicense = true;
# Allow certain insecure packages
permittedInsecurePackages = [ "olm-3.2.16" ];
# Piano raspberry pi
pianonix = lib.nixosSystem {
modules = [./hosts/pianonix];
specialArgs = {
inherit inputs outputs;
};
};
kardorf = lib.nixosSystem {
modules = [./hosts/kardorf];
specialArgs = {
inherit inputs outputs;
};
};
builder = lib.nixosSystem {
modules = [./hosts/builder];
specialArgs = {
inherit inputs outputs;
};
};
};
systems.modules.nixos = with inputs; [
nix-topology.nixosModules.default
sops-nix.nixosModules.sops
disko.nixosModules.disko
];
systems.hosts.pianonix.modules = with inputs; [ nixos-hardware.nixosModules.raspberry-pi-4 ];
# Standalone HM
homeConfigurations = {
# Main laptop
"julian@aspi" = lib.homeManagerConfiguration {
modules = [
./homes/julian/aspi.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
# Media server (RPi)
"julian@pianonix" = lib.homeManagerConfiguration {
modules = [
./homes/julian/pianonix.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.aarch64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
"julian@kardorf" = lib.homeManagerConfiguration {
modules = [
./homes/julian/kardorf.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
"julian@v3ms" = lib.homeManagerConfiguration {
modules = [
./homes/julian/v3ms
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
};
# topology =
# with inputs;
# let
# host = self.nixosConfigurations.${builtins.head (builtins.attrNames self.nixosConfigurations)};
# in
# import nix-topology {
# inherit (host) pkgs; # Only this package set must include nix-topology.overlays.default
# modules = [
# (import ./topology { inherit (host) config; })
# { inherit (self) nixosConfigurations; }
# ];
# };
# deploy-rs node configuration
deploy.nodes.pianonix = {
# deploy-rs node configuration
deploy.nodes = {
pianonix = {
hostname = "pianonix.local";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos inputs.self.nixosConfigurations.pianonix;
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
};
};
deploy.nodes.builder = {
builder = {
hostname = "builder.julian-mutter.de";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos inputs.self.nixosConfigurations.builder;
# confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
remoteBuild = true;
};
};
};
};
}

56
homes/julian/aspi.nix Normal file
View File

@ -0,0 +1,56 @@
{
imports = [
./global
./features/fish
./features/direnv
./features/topgrade
./features/neovim
./features/ghostty
./features/wezterm
./features/alacritty
./features/yazi
./features/emacs
./features/hyprland
./features/suites/cli
./features/suites/desktop
./features/suites/development
];
hostName = "aspi";
is-nixos = true;
terminal = "alacritty";
# ------- ----------
# | eDP-1 | | HDMI-A-1 |
# ------- ----------
monitors = [
{
name = "HDMI-A-1";
# width = 1680;
# height = 1050;
workspaces = [
"1"
"2"
"3"
"4"
"5"
];
primary = true;
}
{
name = "eDP-1";
# width = 1680;
# height = 1050;
workspaces = [
"6"
"7"
"8"
"9"
"10"
];
}
];
}

View File

@ -0,0 +1,13 @@
{
lib,
config,
...
}: {
programs.alacritty = {
enable = true;
settings = {};
theme = "smoooooth";
};
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";
}

View File

@ -0,0 +1,6 @@
{
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
}

View File

@ -0,0 +1,73 @@
{
lib,
pkgs,
config,
...
}:
with lib; let
doomRepoUrl = "https://github.com/doomemacs/doomemacs";
configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config";
in {
home.sessionPath = ["/home/julian/.config/emacs/bin"];
home.packages = with pkgs;
[
binutils # native-comp needs 'as', provided by this
## Doom dependencies
git
(ripgrep.override {withPCRE2 = true;})
## Optional dependencies
fd # faster projectile indexing
imagemagick # for image-dired
zstd # for undo-fu-session/undo-tree compression
## Module dependencies
(aspellWithDicts (
ds:
with ds; [
en
en-computers
en-science
de
]
))
hunspell
hunspellDicts.de_DE
hunspellDicts.en_US
sqlite
# Code formatters for use with doom emacs
nixfmt-rfc-style # nix
alejandra # nix
nixd # nix lsp
dockfmt # docker
google-java-format # java
black # python
rustfmt # rust
shfmt
pyright
clang-tools # c++ lsp etc
ltex-ls # latex languagetool
graphviz
# Lsps for use with doom emacs
# neocmakelsp # cmake
emacs-all-the-icons-fonts
]
++ lib.optional config.is-nixos emacs;
home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [ ! -d "/home/julian/.config/emacs" ]; then
$DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs"
fi
if [ ! -d "/home/julian/.config/doom" ]; then
$DRY_RUN_CMD ${pkgs.git}/bin/git clone "${configRepoUrl}" "/home/julian/.config/doom"
fi
'';
}

View File

@ -0,0 +1,52 @@
{
lib,
pkgs,
...
}:
with lib; {
home.file = {
".config/starship.toml".source = ./starship.toml;
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;
};
home.packages = with pkgs; [
starship
lazygit
];
home.shellAliases = {
g = "lazygit";
ls = "ls --color";
la = "ls -Alh --color";
grep = "grep --color";
conf = "edit-config";
};
programs.starship = {
enable = true;
enableFishIntegration = true;
};
programs.fish = {
enable = true;
interactiveShellInit = "set fish_greeting"; # Disable default greeting
functions = {
mkcd = ''
mkdir $argv
cd $argv
'';
run = ''
nix run nixpkgs#"$argv[1]" -- $argv[2..-1]
'';
shell = ''
set args
for arg in $argv
set args $args nixpkgs#$arg
end
nix shell $args
'';
};
};
}

View File

@ -0,0 +1,21 @@
{
lib,
pkgs,
config,
...
}:
with lib; {
fonts.fontconfig.enable = true; # required to autoload fonts from packages
home.packages = with pkgs; [
nerd-fonts.fira-code
font-awesome
dejavu_fonts
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
liberation_ttf
fira-code
fira-code-symbols
source-code-pro
];
}

View File

@ -0,0 +1,13 @@
{
services.gammastep = {
enable = true;
provider = "geoclue2";
temperature = {
day = 6000;
night = 4600;
};
settings = {
general.adjustment-method = "wayland";
};
};
}

View File

@ -0,0 +1,16 @@
{
lib,
config,
...
}: {
programs.ghostty = {
enable = true;
enableFishIntegration = true;
settings = {
theme = "catppuccin-mocha";
font-size = 12;
};
};
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "ghostty") "ghostty";
}

View File

@ -0,0 +1,33 @@
{
config,
pkgs,
inputs,
...
}: let
inherit (inputs.nix-colors.lib-contrib {inherit pkgs;}) gtkThemeFromScheme;
in {
# Do not make conditional, just toggle things on and off
imports = [inputs.nix-colors.homeManagerModules.default]; # TODO: what does this do
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
gtk = {
enable = true;
theme = {
name = inputs.nix-colors.colorschemes.${config.colorscheme.name}.slug;
package = gtkThemeFromScheme {
scheme = inputs.nix-colors.colorschemes.${config.colorscheme.name};
};
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
cursorTheme = {
package = pkgs.apple-cursor;
name = "macOS";
size = 24;
};
};
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
}

View File

@ -0,0 +1,405 @@
{
pkgs,
inputs,
config,
lib,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
imports = [
# inputs.hyprland.homeManagerModules.default
./waybar
./wofi
./mako
# ./hyprlock
./wlogout
../gammastep
./swayidle.nix
./swaylock.nix
./zathura.nix
./waypipe.nix
./hyprbars.nix
];
xdg.portal = {
extraPortals = [pkgs.xdg-desktop-portal-wlr];
config.hyprland = {
default = [
"wlr"
"gtk"
];
};
};
programs.imv.enable = true; # TODO: what is that
home.packages = with pkgs; [
hyprpicker
brightnessctl
frajul.hyprshot-gui
frajul.wl-ocr
wf-recorder
wl-clipboard
(pkgs.writeShellScriptBin "toggle-screen-mirroring" (
builtins.readFile ./toggle-screen-mirroring.sh
))
(pkgs.writeShellScriptBin "correct-workspace-locations" (
lib.concatStringsSep "\n" (
builtins.concatLists (
map (
monitor:
map (ws: "hyprctl dispatch moveworkspacetomonitor ${ws} ${monitor.name}") monitor.workspaces
)
config.monitors
)
)
))
];
services.cliphist = {
enable = true;
};
home.sessionVariables = {
MOZ_ENABLE_WAYLAND = 1;
QT_QPA_PLATFORM = "wayland";
LIBSEAT_BACKEND = "logind";
};
# services.hypridle = {
# enable = true;
# settings = {
# general = {
# after_sleep_cmd = "hyprctl dispatch dpms on";
# ignore_dbus_inhibit = false;
# lock_cmd = "hyprlock";
# };
# listener = [
# {
# timeout = 300; # 5min
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
# on-resume = "brightnessctl -r"; # monitor backlight restore.
# }
# {
# timeout = 360; # 6min
# on-timeout = "hyprlock"; # lock screen when timeout has passed
# }
# {
# timeout = 600; # 10min
# on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
# on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
# }
# ];
# };
# };
# services.hypridle.enable = true; # can be configured
services.network-manager-applet.enable = true;
wayland.windowManager.hyprland = {
# Whether to enable Hyprland wayland compositor
enable = true;
# package = config.lib.nixGL.wrap (
# pkgs.hyprland.override {
# # nixgl needed?
# wrapRuntimeDeps = false;
# }
# );
systemd = {
enable = true;
# Same as default, but stop graphical-session too
extraCommands = lib.mkBefore [
"systemctl --user stop graphical-session.target"
"systemctl --user start hyprland-session.target"
];
variables = [
"DISPLAY"
"HYPRLAND_INSTANCE_SIGNATURE"
"WAYLAND_DISPLAY"
"XDG_CURRENT_DESKTOP"
];
};
# package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable
# The hyprland package to use (simplifies use of plugins)
# package = inputs.hyprland.packages.${pkgs.system}.hyprland;
# Whether to enable XWayland
xwayland.enable = true;
# Optional
# Whether to enable hyprland-session.target on hyprland startup
# systemd.enable = true;
# Make PATH available to systemd services
# systemd.variables = [ "--all" ];
plugins = [
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
# hyprlandPlugins.hyprbars
];
settings = {
"$mod" = "SUPER";
# Environment variables programs like emacs have access to
env = "TERMINAL,${config.terminal}";
# Monitors
monitor = ",preferred,auto,1";
# Autostart
exec-once = ["firefox"];
# Look and Feel
general = {
gaps_in = 5;
gaps_out = 5;
layout = "dwindle";
# "col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
# "col.inactive_border" = "0xff${palette.base00}";
};
decoration = {
# power saving
blur.enabled = false;
# power saving
shadow.enabled = false;
};
# Dwindle layout
dwindle = {
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true; # You probably want this
smart_split = false;
smart_resizing = false;
force_split = 2;
# no_gaps_when_only = 2; # with border
};
# Master layout
master = {
new_status = "slave";
# no_gaps_when_only = 2; # with border
mfact = 0.5; # Do not make master bigger
};
animations = {
enabled = true;
animation = [
"windows,1,3,default,slide"
"fade,1,3,default"
"layers,1,3,default,slide"
"border,1,3,default"
"workspaces,1,3,default,slide"
];
};
exec = [
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
"correct-workspace-locations"
];
misc = {
# disable auto polling for config file changes
disable_autoreload = true;
force_default_wallpaper = 0;
vfr = true; # power saving
};
render = {
# we do, in fact, want direct scanout
direct_scanout = true;
};
# Input
input = {
kb_layout = "de";
natural_scroll = false;
follow_mouse = 1;
};
# Window rules
windowrulev2 = [
"suppressevent maximize, class:.*"
"workspace 1, class:firefox"
"workspace 9, class:nheko"
"workspace 9, class:org.telegram.desktop"
"workspace 10, class:thunderbird"
"float, class:qalculate-gtk"
"tile, class:MATLAB, title:MATLAB"
];
# Workspace rules
workspace =
[
# smart gaps (none when only one window in workspace)
"w[t1], gapsin:0, gapsout:0, border:1"
"w[tg1], gapsin:0, gapsout:0, border:1"
"f[1], gapsin:0, gapsout:0, border:1"
]
# builds like "1, e-DP1" "2, HDMI-1" etc.
++ builtins.concatLists (
map (monitor: map (ws: "${ws}, monitor:${monitor.name}") monitor.workspaces) config.monitors
);
# Mouse binds
bindm = [
"$mod, mouse:272, movewindow" # leftclick
"$mod, mouse:273, resizewindow" # rightclick
];
# binds
bind =
[
# compositor commands
"$mod, Space, focuswindow, floating"
"$mod SHIFT, Space, togglefloating,"
"$mod, F, fullscreen,"
"$mod, X, killactive,"
"$mod, O, togglesplit," # dwindle
# opening applications
"$mod, D, exec, wofi --show drun,run"
"$mod, E, exec, pcmanfm"
"$mod, Return, exec, ${config.terminal}"
"$mod, B, exec, firefox"
"$mod, C, exec, qalculate-gtk"
# other commands
"$mod SHIFT, E, exec, wlogout -p layer-shell"
"$mod, Escape, exec, wlogout -p layer-shell"
"$mod SHIFT, R, exec, hyprctl reload"
"$mod, Print, exec, hyprshot-gui"
", Print, exec, hyprshot-gui"
"$mod, P, exec, toggle-screen-mirroring; correct-workspace-locations"
# "$mod SHIFT, E, exec, pkill Hyprland"
# "$mod, G, togglegroup,"
# "$mod SHIFT, N, changegroupactive, f"
# "$mod SHIFT, P, changegroupactive, b"
# "$mod ALT, ,resizeactive,"
# media keys
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl pause"
", XF86AudioStop, exec, playerctl stop"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+"
", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-"
# move focus
"$mod, left, movefocus, l"
"$mod, H, movefocus, l"
"$mod, right, movefocus, r"
"$mod, L, movefocus, r"
"$mod, up, movefocus, u"
"$mod, K, movefocus, u"
"$mod, down, movefocus, d"
"$mod, J, movefocus, d"
# move window
"$mod SHIFT, left, movewindow, l"
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, right, movewindow, r"
"$mod SHIFT, L, movewindow, r"
"$mod SHIFT, up, movewindow, u"
"$mod SHIFT, K, movewindow, u"
"$mod SHIFT, down, movewindow, d"
"$mod SHIFT, J, movewindow, d"
# Switch workspaces with mainMod + [0-9]
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, 9, movetoworkspace, 9"
"$mod SHIFT, 0, movetoworkspace, 10"
# Move active window to a workspace without following with mainMod + CTRL + [0-9]
"$mod CTRL, 1, movetoworkspacesilent, 1"
"$mod CTRL, 2, movetoworkspacesilent, 2"
"$mod CTRL, 3, movetoworkspacesilent, 3"
"$mod CTRL, 4, movetoworkspacesilent, 4"
"$mod CTRL, 5, movetoworkspacesilent, 5"
"$mod CTRL, 6, movetoworkspacesilent, 6"
"$mod CTRL, 7, movetoworkspacesilent, 7"
"$mod CTRL, 8, movetoworkspacesilent, 8"
"$mod CTRL, 9, movetoworkspacesilent, 9"
"$mod CTRL, 0, movetoworkspacesilent, 10"
]
++
# Screen lock
(
let
swaylock = lib.getExe config.programs.swaylock.package;
in
lib.optionals config.programs.swaylock.enable [
"$mod,TAB,exec,${swaylock} --daemonize"
]
)
++
# Notification manager
(
let
makoctl = lib.getExe' config.services.mako.package "makoctl";
in
lib.optionals config.services.mako.enable [
"$mod,w,exec,${makoctl} dismiss"
"$mod SHIFT,W,exec,${makoctl} restore"
]
);
# plugin = {
# hyprbars = {
# bar_text_size = 10;
# bar_height = 16;
# bar_text_font = "Ubuntu Nerd Font";
# bar_precedence_over_border = true;
# bar_color = "rgb(${palette.base01})";
# hyprbars-button = [ "rgb(${palette.base03}), 14, 󰖭, hyprctl dispatch killactive" ];
# };
# };
};
};
}

View File

@ -0,0 +1,76 @@
{
config,
pkgs,
lib,
outputs,
...
}: let
getHostname = x: lib.last (lib.splitString "@" x);
# remoteColorschemes = lib.mapAttrs' (n: v: {
# name = getHostname n;
# value = v.config.colorscheme.rawColorscheme.colors.${config.colorscheme.mode};
# }) outputs.homeConfigurations;
rgb = color: "rgb(${lib.removePrefix "#" color})";
rgba = color: alpha: "rgba(${lib.removePrefix "#" color}${alpha})";
hyprbars =
(pkgs.hyprlandPlugins.hyprbars.override {
# Make sure it's using the same hyprland package as we are
hyprland = config.wayland.windowManager.hyprland.package;
}).overrideAttrs
(old: {
# Yeet the initialization notification (I hate it)
postPatch =
(old.postPatch or "")
+ ''
${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp
'';
});
in {
wayland.windowManager.hyprland = {
plugins = [hyprbars];
settings = {
"plugin:hyprbars" = {
bar_height = 25;
# bar_color = rgba config.colorscheme.colors.surface "dd";
# "col.text" = rgb config.colorscheme.colors.primary;
# bar_text_font = config.fontProfiles.regular.name;
# bar_text_size = config.fontProfiles.regular.size;
bar_part_of_window = true;
bar_precedence_over_border = true;
hyprbars-button = let
closeAction = "hyprctl dispatch killactive";
isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null'';
moveToSpecial = "hyprctl dispatch movetoworkspacesilent special";
moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')";
minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}";
maximizeAction = "hyprctl dispatch fullscreen 1";
in [
# Red close button
# "${rgb config.colorscheme.colors.red},12,,${closeAction}"
# # Yellow "minimize" (send to special workspace) button
# "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}"
# # Green "maximize" (fullscreen) button
# "${rgb config.colorscheme.colors.green},12,,${maximizeAction}"
];
};
# windowrulev2 =
# [
# "plugin:hyprbars:bar_color ${rgba config.colorscheme.colors.primary "ee"}, focus:1"
# "plugin:hyprbars:title_color ${rgb config.colorscheme.colors.on_primary}, focus:1"
# ]
# ++ (lib.flatten (
# lib.mapAttrsToList (name: colors: [
# "plugin:hyprbars:bar_color ${rgba colors.primary_container "dd"}, title:\\[${name}\\].*"
# "plugin:hyprbars:title_color ${rgb colors.on_primary_container}, title:\\[${name}\\].*"
# "plugin:hyprbars:bar_color ${rgba colors.primary "ee"}, title:\\[${name}\\].*, focus:1"
# "plugin:hyprbars:title_color ${rgb colors.on_primary}, title:\\[${name}\\].*, focus:1"
# ]) remoteColorschemes
# ));
};
};
}

View File

@ -0,0 +1,46 @@
{
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
programs.hyprlock.enable = true;
programs.hyprlock.settings = {
general = {
disable_loading_bar = true;
hide_cursor = true;
ignore_empty_input = true;
};
background = [
{
color = "#${palette.base00}";
# path = "screenshot";
# blur_passes = 3;
# blur_size = 8;
}
];
input-field = [
{
size = "200, 50";
position = "0, -80";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_color = "#${palette.base0B}";
inner_color = "#${palette.base01}";
outer_color = "#${palette.base05}";
outline_thickness = 5;
placeholder_text = "Password...";
}
];
};
}

View File

@ -0,0 +1,30 @@
{
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
home.packages = with pkgs; [libnotify];
services.mako = {
enable = true;
settings = {
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
backgroundColor = "#${palette.base00}";
textColor = "#${palette.base05}";
borderColor = "#${palette.base0D}";
progressColor = "over #${palette.base02}";
extraConfig = ''
[urgency=high]
border-color=#${palette.base09}
# '';
};
};
}

View File

@ -0,0 +1,58 @@
{
pkgs,
lib,
config,
...
}: let
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
pgrep = "${pkgs.procps}/bin/pgrep";
pactl = "${pkgs.pulseaudio}/bin/pactl";
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
isLocked = "${pgrep} -x ${swaylock}";
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
afterLockTimeout = {
timeout,
command,
resumeCommand ? null,
}: [
{
timeout = lockTime + timeout;
inherit command resumeCommand;
}
{
command = "${isLocked} && ${command}";
inherit resumeCommand timeout;
}
];
in {
services.swayidle = {
enable = true;
systemdTarget = "graphical-session.target";
timeouts =
# Lock screen
[
{
timeout = lockTime;
command = "${swaylock} --daemonize --grace 15";
}
]
++
# Turn off displays (hyprland)
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
timeout = 300;
command = "${hyprctl} dispatch dpms off";
resumeCommand = "${hyprctl} dispatch dpms on";
}))
++
# Turn off displays (sway)
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
timeout = 300;
command = "${swaymsg} 'output * dpms off'";
resumeCommand = "${swaymsg} 'output * dpms on'";
}));
};
}

View File

@ -0,0 +1,16 @@
{
config,
pkgs,
...
}: let
inherit (config.colorscheme) colors;
in {
programs.swaylock = {
enable = true;
settings = {
color = "000000";
ignore-empty-password = true;
indicator-idle-visible = false;
};
};
}

View File

@ -0,0 +1,67 @@
#! /usr/bin/env sh
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
# Launch at startup to make hyprland disable the internal monitor if an external monitor is detected and enabled
# Additionally it's called with a keybind to switch between a laptop monitor and an external display
# Ideally the conditional monitor behaviour was instead done directly in hyprland.conf, but I'm not sure whether that's possible
#
# Relevant info:
# - hyprctl monitors: identifies currently enabled monitors
# - hyprctl monitors all: identifies ALL connected monitors - including those not in use
#
# Suggested use:
# Add this line somewhere after the regular monitor configuration in hyprland.conf:
# exec = /path/to/hyprland-monitors-toggle.sh
# Add a keybind to run this script on demand:
# bind =,SomeKeyHere, exec, /path/to/hyprland-monitors-toggle.sh
#move_all_workspaces_to_monitor() {
# TARGET_MONITOR="$1"
# hyprctl workspaces | grep ^workspace | cut --delimiter ' ' --fields 3 | xargs -I '{}' hyprctl dispatch moveworkspacetomonitor '{}' "$TARGET_MONITOR"
# # Previous approach
# #hyprctl swapactiveworkspaces $EXTERNAL_MONITOR $INTERNAL_MONITOR
#}
# TODO: Detect these instead of hardcoding them
INTERNAL_MONITOR="eDP-1"
EXTERNAL_MONITOR="HDMI-A-1"
# NUM_MONITORS=$(hyprctl monitors all | grep --count Monitor)
# NUM_MONITORS_ACTIVE=$(hyprctl monitors | grep --count Monitor)
# Make sure all
# if [ "$NUM_MONITORS_ACTIVE" -eq 1 ]; then
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# exit
# fi
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .mirrorOf')
# # For dynamically toggling which monitor is active later via a keybind
# if [ "$NUM_MONITORS" -gt 1 ]; then # Handling multiple monitors
# if hyprctl monitors | cut --delimiter ' ' --fields 2 | grep --quiet ^$EXTERNAL_MONITOR; then
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable"
# else
# hyprctl keyword monitor $EXTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $EXTERNAL_MONITOR
# hyprctl keyword monitor "$INTERNAL_MONITOR, disable"
# fi
# else # If the external monitor is disconnected without running this script first, it might become the case that no monitor is on - therefore turn on the laptop monitor!
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# fi
echo setting:
echo $MIRROR_SETTING
if [ "$MIRROR_SETTING" = "none" ]; then
echo "mirroring..."
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1, mirror, $INTERNAL_MONITOR"
else
hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1"
fi

View File

@ -75,9 +75,9 @@
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}% ({time})",
"format-charging": " {capacity}% ({time})",
"format-plugged": " {capacity}% ({time})",
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-full": "{icon} ",
"format-icons": ["", "", "", "", ""]
},

View File

@ -0,0 +1,36 @@
{
options,
config,
pkgs,
lib,
inputs,
...
}: let
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
in {
programs.waybar = {
enable = true;
systemd.enable = true;
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
};
xdg.configFile."waybar/style.css".source = ./style.css;
xdg.configFile."waybar/theme.css".text = ''
/*
bg - background
fg - foreground
*/
/* Main Colors */
@define-color background #${palette.base00};
@define-color foreground #${palette.base05};
/* Workspace Button Colors */
@define-color hover-bg #${palette.base01};
@define-color hover-fg #${palette.base05};
@define-color active-bg #${palette.base02};
@define-color active-fg #${palette.base0A};
@define-color urgent-bg #${palette.base08};
@define-color urgent-fg #${palette.base00};
'';
}

View File

@ -0,0 +1,29 @@
{
pkgs,
lib,
config,
...
}: {
home.packages = [pkgs.waypipe];
systemd.user.services = {
waypipe-client = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
Service = {
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/client.sock client";
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/client.sock";
};
Install.WantedBy = ["graphical-session.target"];
};
waypipe-server = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
Service = {
Type = "simple";
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/server.sock --title-prefix '[%H] ' --login-shell --display wayland-waypipe server -- ${lib.getExe' pkgs.coreutils "sleep"} infinity";
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/server.sock %t/wayland-waypipe";
};
Install.WantedBy = ["default.target"];
};
};
}

View File

@ -0,0 +1,39 @@
{
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
home.packages = with pkgs; [wlogout];
# xdg.configFile."wlogout/style.css".text = ''
# * {
# all: unset;
# font-family: JetBrains Mono Nerd Font;
# }
# window {
# background-color: #${palette.base00};
# }
# button {
# color: #${palette.base01};
# font-size: 64px;
# background-color: rgba(0,0,0,0);
# outline-style: none;
# margin: 5px;
# }
# button:focus, button:active, button:hover {
# color: #${palette.base0D};
# transition: ease 0.4s;
# }
# '';
}

View File

@ -0,0 +1,86 @@
{
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
home.packages = with pkgs; [wofi];
xdg.configFile."wofi/config".source = ./config;
xdg.configFile."wofi/style.css".text = ''
window {
margin: 5px;
border: 5px solid #181926;
background-color: #${palette.base00};
border-radius: 15px;
font-family: "JetBrainsMono";
font-size: 14px;
}
#input {
all: unset;
min-height: 36px;
padding: 4px 10px;
margin: 4px;
border: none;
color: #${palette.base05};
font-weight: bold;
background-color: #${palette.base01};
outline: none;
border-radius: 15px;
margin: 10px;
margin-bottom: 2px;
}
#inner-box {
margin: 4px;
padding: 10px;
font-weight: bold;
border-radius: 15px;
}
#outer-box {
margin: 0px;
padding: 3px;
border: none;
border-radius: 15px;
border: 5px solid #${palette.base01};
}
#scroll {
margin-top: 5px;
border: none;
border-radius: 15px;
margin-bottom: 5px;
}
#text:selected {
color: #${palette.base01};
margin: 0px 0px;
border: none;
border-radius: 15px;
}
#entry {
margin: 0px 0px;
border: none;
border-radius: 15px;
background-color: transparent;
}
#entry:selected {
margin: 0px 0px;
border: none;
border-radius: 15px;
background: #${palette.base0D};
background-size: 400% 400%;
}
'';
}

View File

@ -0,0 +1,33 @@
{config, ...}: let
inherit (config.colorscheme) colors;
in {
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
# TODO fix
# font = "${config.fontProfiles.regular.name} ${toString config.fontProfiles.regular.size}";
# recolor = true;
# default-bg = "${colors.surface}";
# default-fg = "${colors.surface_bright}";
# statusbar-bg = "${colors.surface_container}";
# statusbar-fg = "${colors.on_surface_variant}";
# inputbar-bg = "${colors.surface}";
# inputbar-fg = "${colors.on_secondary}";
# notification-bg = "${colors.surface}";
# notification-fg = "${colors.on_secondary}";
# notification-error-bg = "${colors.error}";
# notification-error-fg = "${colors.on_error}";
# notification-warning-bg = "${colors.error}";
# notification-warning-fg = "${colors.on_error}";
# highlight-color = "${colors.tertiary}";
# highlight-active-color = "${colors.secondary}";
# completion-bg = "${colors.surface_bright}";
# completion-fg = "${colors.on_surface}";
# completions-highlight-bg = "${colors.secondary}";
# completions-highlight-fg = "${colors.on_secondary}";
# recolor-lightcolor = "${colors.surface}";
# recolor-darkcolor = "${colors.inverse_surface}";
};
};
}

View File

@ -0,0 +1,53 @@
{
lib,
pkgs,
config,
...
}: {
imports = [../rofi];
services.dunst.enable = true;
programs = {
i3status-rust = {
enable = true;
};
};
home.packages = with pkgs; [
nitrogen
xfce.xfce4-screenshooter
pulseaudio # For pactl commands
];
xsession.enable = true; # Give gui programs access to sessionVariables
# Prevent screen from going blank (check these settings with `xset q`)
# And disable bell sound (b)
xsession.initExtra = ''
${pkgs.xorg.xset}/bin/xset s off
${pkgs.xorg.xset}/bin/xset -dpms
${pkgs.xorg.xset}/bin/xset b off
'';
xsession.windowManager.i3 = {
enable = true;
package = pkgs.i3-gaps;
};
xsession.importedVariables = [];
# Overwrite default home-manager config file
xdg.configFile."i3/config".source = lib.mkForce (
if config.hostName == "kardorf"
then ./i3/config-kardorf
else ./i3/config
);
home.file = {
".config/i3/scripts" = {
source = ./i3/scripts;
recursive = true;
};
".config/i3/workspace-messaging.json".source = ./i3/workspace-chat-element-tele.json;
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
};
home.sessionPath = ["/home/julian/.config/i3/scripts"];
}

View File

@ -142,8 +142,8 @@ bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
# Monitor config
set $monitor_left "DVI-D-0"
set $monitor_right "DVI-D-1"
set $monitor_left "DVI-D-1"
set $monitor_right "DVI-D-2"
workspace $ws1 output $monitor_left
workspace $ws2 output $monitor_left

View File

@ -0,0 +1,27 @@
{
lib,
pkgs,
config,
...
}: {
programs.kitty = {
enable = true;
shellIntegration.enableFishIntegration = true;
themeFile = "gruvbox-dark";
settings = {
enable_audio_bell = false;
confirm_os_window_close = 0; # no ask on quit
};
font = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
size = 12;
};
};
# home.shellAliases = {
# ssh = "kitten ssh"; # Copy kitten terminfo to remote
# };
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "kitty") "kitty";
}

View File

@ -0,0 +1,159 @@
{
lib,
pkgs,
inputs,
...
}: {
imports = [inputs.nixvim.homeManagerModules.nixvim];
home.sessionVariables = {
EDITOR = "nvim";
VISUAL = "nvim";
};
home.packages = with pkgs; [
git
gnumake
gcc
ripgrep
fd
stylua
black
nixfmt-rfc-style # nixfmt
];
programs.nixvim = {
enable = true;
viAlias = true;
vimAlias = true;
colorschemes.catppuccin = {
enable = true;
settings.flavour = "mocha";
};
globals.mapleader = " ";
opts = {
number = false;
relativenumber = false;
};
clipboard.register = "unnamedplus"; # Use system clipboard
keymaps = [
{
action = "<cmd>Telescope live_grep<cr>";
key = "<leader>/";
}
{
action = "<cmd>Telescope find_files<cr>";
key = "<leader><space>";
}
{
action = "<cmd>Telescope file_browser<cr>";
key = "<leader>.";
}
{
action = "<cmd>Neogit<cr>";
key = "<leader>gg";
}
{
key = "<C-s>";
action = "<esc><cmd>lua require('conform').format()<cr><cmd>write<cr>";
mode = [
"i"
"x"
"n"
"s"
];
}
];
plugins = {
lualine.enable = true;
commentary.enable = true;
which-key.enable = true;
treesitter.enable = true; # enables all grammar packages
neogit.enable = true; # like magit
trouble.enable = true;
web-devicons.enable = true;
# Shows file trees
oil = {
enable = true;
settings = {
view_options.show_hidden = true;
};
};
# Code formatting
conform-nvim = {
enable = true;
settings.formatters_by_ft = with pkgs; {
lua = ["stylua"];
python = ["black"];
nix = ["nixfmt"];
};
# extraOptions = {
# default_format_opts.lsp_format = "fallback";
# };
};
# autocomplete
cmp = {
enable = true;
autoEnableSources = true;
settings.sources = [
{name = "nvim_lsp";}
{name = "path";}
{name = "buffer";}
];
settings.mapping = {
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
"<C-j>" = "cmp.mapping.select_next_item()";
"<C-k>" = "cmp.mapping.select_prev_item()";
"<C-e>" = "cmp.mapping.abort()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
};
};
# Fuzzy finder
telescope = {
enable = true;
settings.defaults.mappings = {
i = {
"<C-j>".__raw = "require('telescope.actions').move_selection_next";
"<C-k>".__raw = "require('telescope.actions').move_selection_previous";
"<tab>".__raw = "require('telescope.actions').select_default";
};
};
extensions = {
fzf-native.enable = true;
file-browser = {
enable = true;
settings = {
hidden = true; # show hidden files
follow_symlinks = true;
no_ignore = true;
};
};
};
};
lsp = {
enable = true;
servers = {
rust_analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
nixd.enable = true;
pyright.enable = true;
dockerls.enable = true;
lua_ls.enable = true;
clangd.enable = true;
};
};
};
};
}

View File

@ -0,0 +1,12 @@
{pkgs, ...}: {
home.sessionVariables = {
NH_FLAKE = "/home/julian/.dotfiles";
};
home.shellAliases = {
"os" = "nh os switch";
"hs" = "nh home switch";
};
home.packages = with pkgs; [nh];
}

View File

@ -0,0 +1,14 @@
{
lib,
pkgs,
...
}: {
# this would need you to config rofi using home-manager
# programs.rofi = { enable = true; };
home.packages = with pkgs; [rofi];
home.file = {
".config/rofi/config.rasi".source = ./config.rasi;
};
}

View File

@ -0,0 +1,49 @@
{pkgs, ...}: {
home.packages = with pkgs; [
bat
du-dust # Like du tree but better
fd # better find
fdupes # find and delete duplicate files
ffmpeg
findutils # locate
fzf # Fuzzy finder
ghostscript # needed for imagemagick with pdfs
imagemagick
git
gnupg
htop
jq # Command line JSON processor
killall
languagetool # Grammar checker
lazygit # Git client
links2 # Tui web-browser
lnav # log analyzing tool
mc # Tui file browser
# nix-index
nmap
p7zip # unzip 7zip archives
parted
pciutils # lspci
poppler_utils # Pdf utils including pdfimages
libqalculate # Nice tui calculator (qalc)
ripgrep # better grep
rnr # renaming tool
sage # Maths notebooks
tealdeer # tldr
topgrade # System update
tree
unetbootin # TODO
unixtools.procps # TODO
unzip
usbutils # lsusb
wget
wireguard-tools # wg-quick
xorg.xkill
zip
## My scripts
frajul.edit-config
frajul.lntocp
frajul.sos
];
}

View File

@ -0,0 +1,68 @@
{pkgs, ...}: {
imports = [../../gtk];
services.blueman-applet.enable = true;
services.nextcloud-client.enable = true;
services.nextcloud-client.startInBackground = true;
services.network-manager-applet.enable = true;
services.syncthing.tray.enable = true;
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
programs.chromium = {
enable = true;
extensions = [
# Tampermonkey
{id = "dhdgffkkebhmkfjojejmpbldmpobfkfo";}
];
};
home.packages = with pkgs; [
arandr
calibre # ebook manager and viewer
# digikam
discord
# dvdisaster
# element-desktop
# rocketchat-desktop
thunderbird
tdesktop # telegram
# schildichat-desktop # not updated regularly
nheko
evince # Simple pdf reader, good for focusing on document content
firefox
# geogebra
cheese
handbrake
# kitty # Terminal, already available as feature
libnotify
libreoffice
mate.engrampa
nomacs # Image viewer
kdePackages.okular # Pdf reader with many features, good for commenting documents
pavucontrol
pdfsam-basic # Split, merge, etc for pdfs
qalculate-gtk # Nice gui calculator
qpdfview
# qutebrowser
# realvnc-vnc-viewer
rpi-imager # make isos
# rustdesk
tor-browser
unstable.path-of-building # Path of Building
# frajul.pob-dev-version # Path of Building
vlc
wineWowPackages.stable # 32-bit and 64-bit wine
winetricks
xclip # x11 clipboard access from terminal
xfce.mousepad # simple text editor
xournalpp # Edit pdf files
zoom-us # Video conferencing
zotero # Manage papers and other sources
pdfpc # Present slides in pdf form
## My scripts
frajul.open-messaging
frajul.xwacomcalibrate
];
}

View File

@ -0,0 +1,85 @@
{pkgs, ...}: {
home.packages = with pkgs; [
watchexec # Run command when any file in current dir changes
android-tools # adb
# shellcheck # Check bash scripts for common errors
sqlite
scrcpy # Mirror android screen to pc
cargo
clippy
cntr # nix debugger
conda
micromamba # a better, faster conda
devcontainer # development container
devenv # devbox alternative
dbeaver-bin
devbox # dev environments using nix
distrobox # run commands inside docker containers
gcc
gradle
hexedit
unstable.zed-editor
jdk
julia-bin
(texlive.combine {
# for rendering latex in inkscape
inherit
(texlive)
scheme-medium
standalone
amsmath
preview
# needed for org mode export
wrapfig
capt-of
biblatex
;
})
matlab # Using nix-matlab overlay defined in flake
maven
nodejs
pkg-config # Often needed to build something
# pwndbg # improved gdb (debugger)
python3
rust-analyzer
rustc
rustfmt
# (pkgs.inkscape-with-extensions.override {
# inkscapeExtensions = [ pkgs.inkscape-extensions.textext ];
# })
# inkscape-with-extensions
# inkscape-extensions.textext
inkscape
gcolor3 # Color picker
gimp
drawio
audacity
deploy-rs
sops
pandoc # markdown preview
docker-compose
## My scripts
frajul.deploy-to-pianopi
frajul.rtklib
(pkgs.writeShellScriptBin "matlab-rsp" ''
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl
'')
(pkgs.writeShellScriptBin "matlab-paper" ''
matlab -desktop -sd "/home/julian/dev/phdthesis/Phase B/mainSimulation" -softwareopengl
'')
(pkgs.writeShellScriptBin "matlab-robotik" ''
matlab -desktop -sd "/home/julian/nas-sync/Studium/Vorlesungen-Master/ss24/Robotik2" -softwareopengl
'')
(pkgs.writeShellScriptBin "matlab-gram" ''
export GTK_PATH=/usr/lib/gtk-3.0
nix shell nixpkgs#gcc11 --command matlab -desktop -sd "/home/julian/dev/matlab-gram" -softwareopengl
'')
(pkgs.writeShellScriptBin "expenses-tracker" ''
java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
'')
];
}

View File

@ -0,0 +1,28 @@
{
programs.topgrade = {
enable = true;
settings = {
misc.no_self_update = true;
misc.pre_sudo = true; # Cache sudo password for 5 more minutes
misc.assume_yes = true;
misc.no_retry = true;
# pre_commands."Update flake" = "git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
linux.nix_arguments = "--flake /home/julian/.dotfiles";
linux.home_manager_arguments = [
"--flake"
"/home/julian/.dotfiles"
];
git = {
# Additional git repositories to pull
repos = [
"~/.dotfiles"
"~/dev/*"
"~/.config/doom"
];
};
};
};
}

View File

@ -0,0 +1,34 @@
{
lib,
pkgs,
config,
...
}: {
programs.wezterm = {
enable = true;
extraConfig = ''
local wezterm = require 'wezterm'
local config = {}
config.color_scheme = 'Catppuccin Mocha'
-- config.font = wezterm.font 'JetBrains Mono'
-- config.font_size = 12.0
config.hide_tab_bar_if_only_one_tab = true
config.audible_bell = 'Disabled'
config.enable_wayland = false -- Somehow only works for wayland if this is set to false
config.window_close_confirmation = 'NeverPrompt'
return config
'';
};
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "wezterm") "wezterm-start-here";
# Otherwise wezterm does not start in directory of parent process
home.packages = [
(pkgs.writeShellScriptBin "wezterm-start-here" ''
wezterm start --cwd "$PWD"
'')
];
}

View File

@ -0,0 +1,90 @@
{
pkgs,
inputs,
...
}: {
programs.zoxide.enable = true;
programs.zoxide.enableFishIntegration = true;
home.packages = with pkgs; [
exiftool
unar # extract archives
xdragon # dragndrop
poppler_utils # pdf preview
fd
ripgrep
fzf
jq # json preview
ffmpegthumbnailer
xclip
];
home.shellAliases = {
y = "yy"; # Yazi shell wrapper (cd on quit)
};
programs.yazi.enable = true;
programs.yazi.enableFishIntegration = true;
programs.yazi.settings.manager = {
sort_by = "mtime";
sort_reverse = true;
show_hidden = true;
};
programs.yazi.keymap = {
manager.prepend_keymap = [
# Override defaults
{
on = ["e"];
run = ''shell --orphan --confirm "pcmanfm &"'';
desc = "Open gui file manager";
}
{
on = ["<C-o>"];
run = ''shell "$SHELL" --block --confirm'';
desc = "Open shell here";
}
{
on = ["<C-n>"];
run = ''shell 'dragon -x -i -T "$1"' --confirm'';
desc = "Dragndrop via dragon";
}
{
on = ["<Enter>"];
run = "plugin --sync smart-enter";
desc = "Enter the child directory, or open the file";
}
];
input.prepend_keymap = [
{
on = ["<Esc>"];
run = "close";
desc = "Cancel input";
}
];
};
programs.yazi.settings.opener = {
play = [
{
run = ''vlc "$1"'';
orphan = true;
}
];
};
xdg.configFile."yazi/flavors" = {
source = "${inputs.yazi-flavors}";
};
xdg.configFile."yazi/plugins/smart-enter.yazi/init.lua".text = ''
return {
entry = function()
local h = cx.active.current.hovered
ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true })
end,
}
'';
programs.yazi.theme = {
flavor.use = "catppuccin-mocha";
};
}

View File

@ -0,0 +1,44 @@
{
lib,
pkgs,
...
}: {
home.file = {
".config/starship.toml".source = ./starship.toml;
};
home.packages = with pkgs; [starship];
programs.starship = {
enable = true;
enableZshIntegration = true;
};
programs.zsh = {
enable = true;
initExtra =
builtins.readFile ./key-bindings.zsh
+ builtins.readFile ./functions.zsh
+ builtins.readFile ./last-working-dir.zsh
+ builtins.readFile ./dir-navigation.zsh;
zplug = {
enable = true;
plugins = [
# list of plugins: https://github.com/unixorn/awesome-zsh-plugins
{name = "agkozak/zsh-z";}
{
name = "zsh-users/zsh-completions";
}
# make it behave like fish
{name = "zsh-users/zsh-autosuggestions";}
{name = "zsh-users/zsh-history-substring-search";}
{
name = "zsh-users/zsh-syntax-highlighting";
} # must be last sourced plugin
];
};
};
}

View File

@ -0,0 +1,53 @@
{
lib,
pkgs,
config,
outputs,
...
}: {
imports =
[
../features/fonts
../features/nix-helper
]
++ (builtins.attrValues outputs.homeManagerModules);
nix = {
package = lib.mkDefault pkgs.nix;
settings = {
experimental-features = [
"nix-command"
"flakes"
"ca-derivations"
];
# warn-dirty = false; # TODO: do I want it? also for systems
};
};
colorscheme.name = "catppuccin-mocha";
# systemd.user.startServices = "sd-switch"; # TODO: what is this
programs = {
home-manager.enable = true;
git.enable = true;
};
home = {
username = lib.mkDefault "julian";
homeDirectory = lib.mkDefault "/home/${config.home.username}";
stateVersion = lib.mkDefault "23.11";
sessionPath = ["$HOME/.local/bin"];
};
# TODO: colorscheme
# colorscheme.mode = lib.mkOverride 1499 "dark";
# specialisation = {
# dark.configuration.colorscheme.mode = lib.mkOverride 1498 "dark";
# light.configuration.colorscheme.mode = lib.mkOverride 1498 "light";
# };
# home.file = {
# ".colorscheme.json".text = builtins.toJSON config.colorscheme;
# };
}

View File

@ -6,9 +6,11 @@
# inherit pkgs;
# inherit lib;
# };
{ lib, pkgs, ... }:
let
{
lib,
pkgs,
...
}: let
package-names = with pkgs; {
"x-scheme-handler/tg" = telegram-desktop;
"x-scheme-handler/mailto" = thunderbird;
@ -40,6 +42,7 @@ let
"inode/directory" = pcmanfm;
};
in
lib.mapAttrs (mimeType: package: [
"${package}/share/applications/${package.pname}.desktop"
]) package-names
lib.mapAttrs (mimeType: package: [
"${package}/share/applications/${package.pname}.desktop"
])
package-names

View File

@ -0,0 +1,43 @@
# Only apply this to home-manager standalone
{outputs, ...}: {
# Apply overlays
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this
permittedInsecurePackages = [
"olm-3.2.16"
];
warn-dirty = false;
};
};
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
];
trusted-users = [
"root"
"@wheel"
];
experimental-features = [
"nix-command"
"flakes"
"ca-derivations"
];
# nix.settings. # warn-dirty = false; # TODO: do I want this
};
}

56
homes/julian/kardorf.nix Normal file
View File

@ -0,0 +1,56 @@
{
imports = [
./global
./features/fish
./features/direnv
./features/topgrade
./features/neovim
./features/ghostty
./features/wezterm
./features/yazi
./features/emacs
# ./features/hyprland
./features/i3
./features/suites/cli
./features/suites/desktop
./features/suites/development
];
hostName = "kardorf";
is-nixos = true;
terminal = "ghostty";
# --------- ---------
# | DVI-D-1 | | DVI-D-2 |
# --------- ---------
monitors = [
{
name = "DVI-D-1";
width = 1680;
height = 1050;
workspaces = [
"1"
"2"
"3"
"4"
"5"
];
primary = true;
}
{
name = "DVI-D-2";
width = 1680;
height = 1050;
workspaces = [
"6"
"7"
"8"
"9"
"10"
];
}
];
}

37
homes/julian/pianonix.nix Normal file
View File

@ -0,0 +1,37 @@
{pkgs, ...}: {
imports = [
./global
./features/fish
./features/topgrade
./features/neovim
./features/wezterm
./features/yazi
./features/gtk
];
hostName = "pianonix";
is-nixos = true;
terminal = "wezterm";
services.syncthing.tray.enable = true;
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
home.packages = with pkgs; [
music-reader
sheet-organizer
xournalpp
musescore
onboard
];
# Autostart link
home.file = {
".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
".config/sheet-organizer/config.toml".text = ''
working_directory = "/home/julian/Klavier"
'';
};
}

1
homes/julian/ssh.pub Normal file
View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H

View File

@ -0,0 +1,30 @@
{
lib,
pkgs,
...
}: {
imports = [
../global
../features/fish
../features/direnv
../features/topgrade
../features/neovim
../features/yazi
../features/emacs
../features/nix-helper
];
hostName = "aspi";
is-nixos = false;
# terminal = "kitty";
home.sessionPath = ["/snap/bin"];
home.packages =
lib.lists.concatMap (packages-list-file: import packages-list-file {inherit pkgs;})
[
./fonts.nix
./packages.nix
];
}

View File

@ -1,12 +1,10 @@
{ pkgs, ... }:
with pkgs;
[
(nerdfonts.override { fonts = [ "FiraCode" ]; })
{pkgs, ...}:
with pkgs; [
nerd-fonts.fira-code
font-awesome
dejavu_fonts
noto-fonts
noto-fonts-cjk
noto-fonts-cjk-sans
noto-fonts-emoji
liberation_ttf
fira-code

View File

@ -1,7 +1,5 @@
{ pkgs, ... }:
with pkgs;
[
{pkgs, ...}:
with pkgs; [
# Rust setup
rustc
rustfmt
@ -37,4 +35,8 @@ with pkgs;
sage
pkg-config # Often needed to build something
devbox # reproducible dev envs based on nix
mysql80
]

View File

@ -1,61 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
home, # The home architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
format, # A normalized name for the home target (eg. `home`).
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
host, # The host name for this home.
# All other arguments come from the home home.
config,
...
}:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = {
non-nixos.is-nixos = true;
shell = {
# zsh.enable = true;
fish.enable = true;
direnv.enable = true;
};
topgrade.enable = true;
neovim.enable = true;
# kitty.enable = true;
wezterm.enable = true;
yazi.enable = true;
emacs.enable = true;
i3.enable = true;
# hyprland.enable = true;
nix-helper.enable = true;
desktop.enable = true;
fonts.enable = true;
suites = {
cli.enable = true;
desktop.enable = true;
development.enable = true;
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
}

View File

@ -1,57 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
home, # The home architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
format, # A normalized name for the home target (eg. `home`).
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
host, # The host name for this home.
# All other arguments come from the home home.
config,
...
}:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = {
non-nixos.is-nixos = true;
shell = {
fish.enable = true;
direnv.enable = true;
};
topgrade.enable = true;
neovim.enable = true;
# alacritty.enable = true;
kitty.enable = true;
yazi.enable = true;
emacs.enable = true;
i3.enable = true;
nix-helper.enable = true;
desktop.enable = true;
fonts.enable = true;
suites = {
cli.enable = true;
desktop.enable = true;
development.enable = true;
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
}

View File

@ -1,72 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
home,
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
format, # A normalized name for the home target (eg. `home`).
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
host, # The host name for this home.
# All other arguments come from the home home.
config,
...
}@arguments:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = {
non-nixos.is-nixos = true;
shell = {
fish.enable = true;
};
yazi.enable = true;
topgrade.enable = true;
neovim.enable = true;
wezterm.enable = true;
nix-helper.enable = true;
desktop.enable = true;
fonts.enable = true;
};
# Prevent screen from going blank (check these settings with `xset q`)
# And disable bell sound (b)
xsession.initExtra = ''
${pkgs.xorg.xset}/bin/xset s off
${pkgs.xorg.xset}/bin/xset -dpms
${pkgs.xorg.xset}/bin/xset b off
'';
services.syncthing.tray.enable = true;
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
home.packages = with pkgs; [
music-reader
sheet-organizer
];
# Autostart link
home.file = {
".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
".config/sheet-organizer/config.toml".text = ''
working_directory = "/home/julian/Klavier"
'';
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
}

View File

@ -1,53 +0,0 @@
{
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
home, # The home architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
format, # A normalized name for the home target (eg. `home`).
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
host, # The host name for this home.
# All other arguments come from the home home.
config,
...
}:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = {
non-nixos.is-nixos = false;
shell = {
fish.enable = true;
direnv.enable = true;
};
topgrade.enable = true;
neovim.enable = true;
yazi.enable = true;
emacs.enable = true;
nix-helper.enable = true;
};
home.packages =
lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; })
[
./fonts.nix
./packages.nix
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
}

50
hosts/aspi/default.nix Normal file
View File

@ -0,0 +1,50 @@
{
imports = [
./hardware-configuration.nix
../common/global
../common/users/julian
../common/optional/binarycaches.nix
../common/optional/remote-builder.nix
../common/optional/boot-efi.nix
../common/optional/greetd.nix
../common/optional/authentication.nix
../common/optional/pcmanfm.nix
../common/optional/pipewire.nix
../common/optional/gamemode.nix
../common/optional/virtualbox.nix
../common/optional/podman.nix
../common/optional/wireguard.nix
../common/optional/flatpak.nix
../common/optional/avahi.nix
];
networking.hostName = "aspi";
system.stateVersion = "24.05";
modules = {
syncthing = {
enable = true;
overrideSettings = false;
};
};
services.blueman.enable = true;
services.upower.enable = true;
programs.steam.enable = true;
# TODO: not working
services.logind.lidSwitch = "lock";
services.logind.lidSwitchDocked = "lock";
programs.kdeconnect.enable = true;
# Enable touchpad support
services.libinput.enable = true;
}

View File

@ -0,0 +1,78 @@
{
config,
lib,
...
}: {
boot.initrd.availableKernelModules = [
"vmd"
"xhci_pci"
"ahci"
"nvme"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = ["dm-snapshot"];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
boot.blacklistedKernelModules = ["pcspkr"]; # Disables "beep"
boot.binfmt.emulatedSystems = ["aarch64-linux"];
boot.initrd.luks.devices = {
root = {
device = "/dev/disk/by-uuid/a4dc9a2c-725b-4252-8fbb-093a271c31ba";
preLVM = true;
allowDiscards = true;
};
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [
"subvol=root"
"compress=zstd"
];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [
"subvol=home"
"compress=zstd"
];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [
"subvol=nix"
"compress=zstd"
"noatime"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/7040-F37C";
fsType = "vfat";
};
swapDevices = [
{device = "/dev/disk/by-uuid/26140b4a-0579-406d-a484-35aa31b32e80";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.nvidia.open = false;
}

View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZH4AYoERGx5t8gXXmrZetSchwzps8UYwkz8E6SI8D

262
hosts/builder/default.nix Normal file
View File

@ -0,0 +1,262 @@
# sudo nixos-rebuild switch --flake .#builder --target-host root@192.168.3.118
# or
# deploy .#builder
{config, ...}: {
imports = [
./hardware-configuration.nix
../common/global
];
networking.hostName = "builder";
system.stateVersion = "23.11";
users.users.nix = {
isNormalUser = true;
description = "Nix";
extraGroups = [
"networkmanager"
"wheel"
"docker"
];
};
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
trusted-users = ["nix"];
max-jobs = "auto";
cores = 0;
};
# optimize store by hardlinking store files
nix.optimise.automatic = true;
nix.optimise.dates = ["03:15"];
# nix.gc.automatic = true;
# nix.gc.dates = "daily";
# nix.gc.options = "--delete-old";
# nix.settings.keep-derivations = false;
# nix.settings.keep-outputs = true;
# Garbage collect up to 100 GiB when only 20 GiB storage left
nix.extraOptions = ''
min-free = ${toString (20 * 1024 * 1024 * 1024)}
max-free = ${toString (100 * 1024 * 1024 * 1024)}
'';
nix.nrBuildUsers = 64;
# prevent memory to get filled
systemd.services.nix-daemon.serviceConfig = {
MemoryAccounting = true;
MemoryMax = "90%";
OOMScoreAdjust = 500;
};
# Ollama used by open-webui as llm backend
# services.ollama = {
# enable = true;
# # acceleration = "rocm";
# };
# services.open-webui = {
# enable = true;
# port = 8080;
# openFirewall = true;
# host = "builder.julian-mutter.de";
# };
networking.firewall.allowedTCPPorts = [
80
];
services.openssh = {
enable = true;
# require public key authentication for better security
settings.PasswordAuthentication = true;
settings.KbdInteractiveAuthentication = false;
settings.PermitRootLogin = "yes";
};
users.users."root".openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGFcS+3d1tNgHmYCjueymCV9Bd2LcJcKGhVobrDe3r0s julian@kardorf"
];
users.users."nix".openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAIQ+qMuXvyoxO1DuCR3/x+IQRfSA2WyMuzuotWZjCye root@aspi"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHnfLJnS2SKUs47J0qpLTkk0LQA5quOuAhnxE6yppUDm root@kardorf"
];
# security.pam.sshAgentAuth.enable = true; # enable sudo via ssh
services.hydra = {
enable = true;
hydraURL = "http://hydra.julian-mutter.de"; # externally visible URL
port = 3000;
notificationSender = "hydra@julian-mutter.de"; # e-mail of hydra service
# a standalone hydra will require you to unset the buildMachinesFiles list to avoid using a nonexistant /etc/nix/machines
# buildMachinesFiles = [ ];
# you will probably also want, otherwise *everything* will be built from scratch
useSubstitutes = true;
minimumDiskFree = 5; # in GB
minimumDiskFreeEvaluator = 4; # in GB
};
# add builder itself as build machine so system emulation is properly supported
# nix.distributedBuilds = true;
nix.buildMachines = [
{
hostName = "localhost";
protocol = null;
# sshUser = "nix";
systems = [
"x86_64-linux"
"aarch64-linux"
];
maxJobs = 4;
speedFactor = 3;
supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
}
];
# Uris allowed as flake inputs, otherwise hydra does not fetch them
nix.settings.allowed-uris = [
"github:"
"gitlab:"
"git+https://github.com/hyprwm/Hyprland"
"https://github.com/hyprwm/Hyprland"
"https://github"
"https://gitlab"
"https://gitlab.julian-mutter.de"
"git+https://gitlab.julian-mutter.de"
];
services.nginx = {
enable = true;
recommendedProxySettings = true;
# recommendedTlsSettings = true;
# other Nginx options
virtualHosts."hydra.julian-mutter.de" = {
# enableACME = true;
# forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:3000";
# proxyWebsockets = true; # needed if you need to use WebSocket
# extraConfig =
# # required when the target is also TLS server with multiple hosts
# "proxy_ssl_server_name on;" +
# # required when the server wants to use HTTP Authentication
# "proxy_pass_header Authorization;"
# ;
};
};
virtualHosts."binarycache.julian-mutter.de" = {
locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
};
clientMaxBodySize = "2G";
virtualHosts."cache.julian-mutter.de" = {
locations."/".proxyPass = "http://127.0.0.1:8080";
};
};
# =========== Gitea actions ==========
services.gitea-actions-runner.instances."builder" = {
enable = true;
url = "https://gitlab.julian-mutter.de";
name = "builder";
tokenFile = config.sops.secrets."gitea_token".path;
labels = []; # use default labels
};
virtualisation.docker.enable = true;
# TODO: podman fails with: "cannot resolve hostname"
# virtualisation.podman = {
# enable = true;
# dockerCompat = true;
# defaultNetwork.settings.dns_enabled = true;
# };
sops.secrets."gitea_token" = {
owner = config.users.users.nix.name;
sopsFile = ./secrets.yaml;
};
# =========== Binary Cache ==========
services.nix-serve = {
enable = true;
secretKeyFile = "/var/cache-priv-key.pem";
};
# =========== Binary Cache with attic ==========
sops.secrets."attic_token".sopsFile = ./secrets.yaml;
services.atticd = {
enable = true;
environmentFile = config.sops.secrets."attic_token".path;
settings = {
listen = "[::]:8080";
jwt = {};
# Data chunking
#
# Warning: If you change any of the values here, it will be
# difficult to reuse existing chunks for newly-uploaded NARs
# since the cutpoints will be different. As a result, the
# deduplication ratio will suffer for a while after the change.
chunking = {
# The minimum NAR size to trigger chunking
#
# If 0, chunking is disabled entirely for newly-uploaded NARs.
# If 1, all NARs are chunked.
nar-size-threshold = 64 * 1024; # 64 KiB
# The preferred minimum size of a chunk, in bytes
min-size = 16 * 1024; # 16 KiB
# The preferred average size of a chunk, in bytes
avg-size = 64 * 1024; # 64 KiB
# The preferred maximum size of a chunk, in bytes
max-size = 256 * 1024; # 256 KiB
};
};
};
services.gitlab-runner.enable = true;
# runner for everything else
#
sops.secrets."gitlab_runner_token".sopsFile = ./secrets.yaml;
services.gitlab-runner.services.default = {
# File should contain at least these two variables:
authenticationTokenConfigFile = config.sops.secrets."gitlab_runner_token".path;
dockerImage = "alpine:latest";
dockerVolumes = [
"/var/run/docker.sock:/var/run/docker.sock"
];
};
}

View File

@ -0,0 +1,50 @@
{lib, ...}: {
boot.initrd.availableKernelModules = [
"ata_piix"
"uhci_hcd"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
# boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support
boot.kernelModules = [];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/f088fe8e-bf3d-4a89-98bd-ead9852d381f";
fsType = "ext4";
};
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.ens18.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
# hardware.graphics = {
# enable = true;
# extraPackages = with pkgs; [
# rocmPackages.clr.icd
# linuxPackages.amdgpu-pro
# ];
# };
# boot.kernelParams = [
# "radeon.si_support=0"
# "radeon.cik_support=1"
# "amdgpu.si_support=0"
# "amdgpu.cik_support=1"
# ];
# boot.extraModulePackages = with config.boot.kernelPackages; [ amdgpu-pro ];
# boot.blacklistedKernelModules = [ "radeon" ];
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
# Emulated systems used as alternative to cross-compiling
boot.binfmt.emulatedSystems = ["aarch64-linux"];
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
{
inputs,
config,
...
}: {
system.hydraAutoUpgrade = {
# Only enable if not dirty
enable = inputs.self ? rev;
dates = "*:0/10"; # Every 10 minutes
instance = "http://hydra.julian-mutter.de";
project = "dotfiles";
jobset = "main";
job = "hosts.${config.networking.hostName}";
oldFlakeRef = "self";
};
}

View File

@ -0,0 +1,41 @@
# Common config for all hosts
{
inputs,
outputs,
pkgs,
...
}: {
imports =
[
./fish.nix # fish for admin
./locale.nix
./nix.nix
./sops.nix
./root.nix
]
++ [
inputs.home-manager.nixosModules.home-manager
]
++ (builtins.attrValues outputs.nixosModules);
# Replaces the (modulesPath + "/installer/scan/not-detected.nix") from default hardware-configuration.nix
# Enables non-free firmware
hardware.enableRedistributableFirmware = true;
# Networking
networking.networkmanager = {
enable = true;
plugins = with pkgs; [
networkmanager-openconnect
];
};
services.resolved.enable = true;
programs.dconf.enable = true;
# HM
home-manager.useGlobalPkgs = true;
home-manager.extraSpecialArgs = {
inherit inputs outputs;
};
}

View File

@ -0,0 +1,10 @@
{
programs.fish = {
enable = true;
vendor = {
completions.enable = true;
config.enable = true;
functions.enable = true;
};
};
}

View File

@ -0,0 +1,26 @@
{
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "de_DE.UTF-8";
LC_IDENTIFICATION = "de_DE.UTF-8";
LC_MEASUREMENT = "de_DE.UTF-8";
LC_MONETARY = "de_DE.UTF-8";
LC_NAME = "de_DE.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
# Keymap
services.xserver.xkb = {
layout = "de";
variant = "";
};
console.keyMap = "de";
time.timeZone = "Europe/Berlin";
}

View File

@ -0,0 +1,43 @@
{
lib,
outputs,
...
}: {
# Apply overlays
nixpkgs = {
# TODO: apply this to hm and nixos without duplicate code
overlays = builtins.attrValues outputs.overlays;
config = {
nvidia.acceptLicense = true;
allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this
warn-dirty = false;
permittedInsecurePackages = [
"olm-3.2.16"
];
};
};
nix.settings.auto-optimise-store = lib.mkDefault true;
nix.settings.experimental-features = [
"nix-command"
"flakes"
"ca-derivations"
];
# warn-dirty = false;
nix.gc = {
automatic = true;
dates = "weekly";
# Keep the last 3 generations
options = "--delete-older-than +3";
};
programs.nix-ld.enable = true;
# TODO: is this useful?, what does it do?
# nix.settings.flake-registry = ""; # Disable global flake registry
# Add each flake input as a registry and nix_path
# registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
# nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
}

View File

@ -0,0 +1,9 @@
{pkgs, ...}: {
# Packages needed as root
environment.systemPackages = with pkgs; [
vim
htop
mc
gparted-xhost # needs to be installed as system package so it can be actually opened
];
}

View File

@ -0,0 +1,22 @@
{
inputs,
config,
...
}: let
isEd25519 = k: k.type == "ed25519";
getKeyPath = k: k.path;
keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
in {
imports = [inputs.sops-nix.nixosModules.sops];
sops.age = {
sshKeyPaths = map getKeyPath keys;
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
keyFile = "/home/julian/.config/sops/age/keys.txt";
# Generate key if none of the above worked. With this, building will still work, just without secrets
generateKey = false; # TODO: building should not work without secrets!?
};
sops.defaultSopsFile = ../secrets.yaml;
}

View File

@ -0,0 +1,29 @@
{
pkgs,
lib,
...
}: {
# Make programs like nextcloud client access saved passwords
services.gnome.gnome-keyring.enable = true;
programs.seahorse.enable = true;
programs.ssh.askPassword = lib.mkForce "${pkgs.seahorse}/libexec/seahorse/ssh-askpass"; # Solve conflicting definition in seahorse and plasma6
# Make authentication work for e.g. gparted
security.polkit.enable = true;
systemd = {
user.services.polkit-gnome-authentication-agent-1 = {
description = "polkit-gnome-authentication-agent-1";
wantedBy = ["graphical-session.target"];
wants = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
};
}

View File

@ -0,0 +1,9 @@
{
# MDNS on local network
services.avahi = {
enable = true;
nssmdns4 = true;
publish.enable = true;
publish.addresses = true;
};
}

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