215 Commits

Author SHA1 Message Date
Gitea Actions b77e7643dd Update flake.lock 2025-04-28 2026-04-25 00:30:42 +00:00
Gitea Actions b0fb9073b1 Update flake.lock 2025-04-27 2026-04-25 00:30:42 +00:00
Gitea Actions 751fd0d470 Update flake.lock 2025-04-26 2026-04-25 00:30:42 +00:00
Gitea Actions 45cab9d0c8 Update flake.lock 2025-04-25 2026-04-25 00:30:42 +00:00
Gitea Actions 9fedb8c107 Update flake.lock 2025-04-24 2026-04-25 00:30:42 +00:00
Gitea Actions 483deacf79 Update flake.lock 2025-04-23 2026-04-25 00:30:42 +00:00
Gitea Actions 905c19e9cf Update flake.lock 2025-04-22 2026-04-25 00:30:42 +00:00
Gitea Actions 5b2fd3472f Update flake.lock 2025-04-21 2026-04-25 00:30:42 +00:00
Gitea Actions 0f560c3596 Update flake.lock 2025-04-20 2026-04-25 00:30:42 +00:00
Gitea Actions 6bc74facae Update flake.lock 2025-04-19 2026-04-25 00:30:42 +00:00
Gitea Actions 0c2e43a514 Update flake.lock 2025-04-18 2026-04-25 00:30:42 +00:00
Gitea Actions 6686cab532 Update flake.lock 2025-04-17 2026-04-25 00:30:42 +00:00
Gitea Actions d4ad09d0cd Update flake.lock 2025-04-16 2026-04-25 00:30:42 +00:00
Gitea Actions 04577ea081 Update flake.lock 2025-04-15 2026-04-25 00:30:42 +00:00
Gitea Actions 2ab45885c3 Update flake.lock 2025-04-14 2026-04-25 00:30:42 +00:00
Gitea Actions 53e1fc155f Update flake.lock 2025-04-13 2026-04-25 00:30:42 +00:00
Gitea Actions 6d556885c4 Update flake.lock 2025-04-12 2026-04-25 00:30:42 +00:00
Gitea Actions 2b8c5004d9 Update flake.lock 2025-04-11 2026-04-25 00:30:42 +00:00
Gitea Actions 8aa917a190 Update flake.lock 2025-04-10 2026-04-25 00:30:42 +00:00
Gitea Actions a827cd772f Update flake.lock 2025-04-09 2026-04-25 00:30:42 +00:00
Gitea Actions 53f8c2a744 Update flake.lock 2025-04-08 2026-04-25 00:30:42 +00:00
Gitea Actions ab23d15420 Update flake.lock 2025-04-07 2026-04-25 00:30:42 +00:00
Gitea Actions e921a6f96b Update flake.lock 2025-04-06 2026-04-25 00:30:42 +00:00
Gitea Actions 020961cc0d Update flake.lock 2025-04-05 2026-04-25 00:30:42 +00:00
Gitea Actions b2d6c552e0 Update flake.lock 2025-04-04 2026-04-25 00:30:42 +00:00
Gitea Actions 5384b399d7 Update flake.lock 2025-04-03 2026-04-25 00:30:42 +00:00
Gitea Actions ff5d552eb1 Update flake.lock 2025-04-02 2026-04-25 00:30:42 +00:00
Gitea Actions c64667d571 Update flake.lock 2025-04-01 2026-04-25 00:30:42 +00:00
Gitea Actions 88591998c8 Update flake.lock 2025-03-31 2026-04-25 00:30:42 +00:00
Gitea Actions 9fe6af74ec Update flake.lock 2025-03-30 2026-04-25 00:30:42 +00:00
Gitea Actions 9a7352686c Update flake.lock 2025-03-29 2026-04-25 00:30:42 +00:00
Gitea Actions 552a15dede Update flake.lock 2025-03-28 2026-04-25 00:30:42 +00:00
Gitea Actions 307b8a3b51 Update flake.lock 2025-03-27 2026-04-25 00:30:42 +00:00
Gitea Actions e83e0bf430 Update flake.lock 2025-03-26 2026-04-25 00:30:42 +00:00
Gitea Actions 0935360f08 Update flake.lock 2025-03-25 2026-04-25 00:30:42 +00:00
Gitea Actions bccdc24099 Update flake.lock 2025-03-24 2026-04-25 00:30:42 +00:00
Gitea Actions 4e4677519b Update flake.lock 2025-03-23 2026-04-25 00:30:42 +00:00
julian 831f49e8bd Update flake 2026-04-24 11:53:22 +02:00
julian 8acb99770c Add devenv to v3ms 2026-04-24 11:52:20 +02:00
julian 7488da102e Add tmux to v3ms 2026-04-24 11:52:20 +02:00
julian be5e9cce07 Fix screenshots on hyprland
Update Nix Flake / update-flake (push) Failing after 12s
2026-04-13 08:25:30 +02:00
julian 0eddfbef58 Install .desktop file for smath-studio
Update Nix Flake / update-flake (push) Failing after 19s
2026-03-26 09:02:32 +01:00
julian bdb85b6161 Add smath-studio packet 2026-03-26 08:50:33 +01:00
julian 64392b695e Fix recursion on self
Update Nix Flake / update-flake (push) Failing after 22s
2026-03-23 21:57:18 +01:00
julian 8896788bfd Delete unneeded standalone hm configs 2026-03-23 20:58:19 +01:00
julian eec600d1d0 Move common host features to features-nixos folder 2026-03-23 20:57:12 +01:00
julian b31791b9ef Rename pkgs to packages 2026-03-23 20:43:11 +01:00
julian 8de280d7e5 Remove my own trys for pob wrapper 2026-03-23 20:39:47 +01:00
julian 8c8a6121bc Remove unused users 2026-03-23 20:38:38 +01:00
julian f1296e7675 Remove unused pianonix config 2026-03-23 20:37:54 +01:00
julian ba56618049 Fix hm standalone config 2026-03-23 08:15:03 +01:00
julian 349181f35b Add wireshark config
Update Nix Flake / update-flake (push) Failing after 14s
2026-03-15 09:54:11 +01:00
julian 0b8b7564a1 Make nix gc explicitly persistent
Update Nix Flake / update-flake (push) Failing after 15s
2026-03-13 08:14:07 +01:00
julian 54e0f94af5 Add garbage-collect for home-manager 2026-03-13 07:51:57 +01:00
julian 977aa539a3 Update flake
Update Nix Flake / update-flake (push) Failing after 15s
2026-03-12 07:35:43 +01:00
julian d56605e37a Add nix-index-database and comma 2026-03-12 07:34:13 +01:00
julian 7d013c83bc Uninstall rtklib
Update Nix Flake / update-flake (push) Failing after 11s
2026-02-14 06:40:39 +01:00
julian d42f38531d Update flake 2026-02-14 06:40:33 +01:00
julian af54219f5f Install element-desktop too
Update Nix Flake / update-flake (push) Failing after 11s
2026-01-24 16:37:09 +01:00
julian b6f59055d8 Fix quickstart.nix 2026-01-24 16:36:04 +01:00
julian cb990c0cd4 Switch to element-desktop 2026-01-24 16:35:54 +01:00
julian c896e02bf1 Allow unfree packages with "run" and "shell" commands
Update Nix Flake / update-flake (push) Failing after 16s
2026-01-22 06:56:06 +01:00
julian c1e031efa9 Fix "systems deprecated" warning
Update Nix Flake / update-flake (push) Failing after 49s
2026-01-20 21:01:05 +01:00
julian 19f213ca8c development: install opencode 2026-01-20 20:40:09 +01:00
julian a0ebb3f259 builder: add ollama and ui 2026-01-20 20:39:32 +01:00
julian 3a994a3b8d Add more packages to quickstart configuration 2026-01-20 20:39:03 +01:00
julian 3b4c0e4a63 Clean up configs 2026-01-20 20:38:53 +01:00
julian b15dd4ce86 move zoxide from yazi to fish config 2026-01-20 20:38:32 +01:00
julian db5514062c Update readme 2026-01-20 20:24:25 +01:00
julian 7b500ee994 Make v3ms07 a generic quickstart configuration 2026-01-20 20:24:06 +01:00
julian 07eb4664f9 Update flake 2026-01-20 20:04:32 +01:00
julian 872f80e92c Remove non-working packages 2026-01-20 20:02:48 +01:00
julian 562f873f97 hyprland: adapt keyboard shortcuts 2026-01-20 20:02:32 +01:00
julian 2f5868fcca Add config for v3ms07 2026-01-20 20:02:01 +01:00
julian e1c1f6e104 emacs: install latex for org mode previews
Update Nix Flake / update-flake (push) Failing after 14s
2026-01-06 12:10:16 +01:00
julian 3bdf73557b desktop: remove vivaldi 2026-01-06 12:04:16 +01:00
julian bb9988245a hyprland: add submaps for common open commands 2026-01-06 12:04:05 +01:00
julian 713f5bfe8c update flake 2026-01-06 12:03:55 +01:00
julian c26f4ccd9a kardorf: install steam
Update Nix Flake / update-flake (push) Failing after 14s
2025-12-29 06:21:10 +01:00
julian d84bfd4628 use network manager dns instead of resolved
Update Nix Flake / update-flake (push) Failing after 12s
2025-12-24 06:48:22 +01:00
julian fb6ac408e1 format code 2025-12-24 06:47:56 +01:00
julian f01b079931 emacs: add ltex-ls-plus language server 2025-12-24 06:47:43 +01:00
julian 78990e6414 fix typst-languagetool installation typo
Update Nix Flake / update-flake (push) Failing after 12s
2025-12-18 10:37:10 +01:00
julian cef602d758 update flake 2025-12-18 10:37:00 +01:00
julian 368e741211 add typst-languagetool package 2025-12-18 10:36:21 +01:00
julian fec13e08b9 dev suite: remove latex
Update Nix Flake / update-flake (push) Failing after 13s
2025-12-13 07:59:44 +01:00
julian a540ca622d kardorf: switch to hyprland 2025-12-13 07:59:35 +01:00
julian 7fb0bcdac0 nixvim: add orgmode support 2025-12-13 07:59:20 +01:00
julian b7726fce94 hyprland: fix cursor tearing 2025-12-13 07:58:54 +01:00
julian 30c987bd9b hm: remove my binarycache for hm-standalone
Update Nix Flake / update-flake (push) Failing after 12s
Normally I wont have VPN access on standalone
2025-12-08 17:12:10 +01:00
julian 539e9a0b8e v3ms: add qt-distrobox 2025-12-08 17:09:45 +01:00
julian 1e4593ea17 home: add qt-distrobox config 2025-12-08 17:09:14 +01:00
julian ec8a71de95 open-messaging: update name of telegram binary
Update Nix Flake / update-flake (push) Failing after 14s
2025-12-06 11:30:42 +01:00
julian 0c39388b21 gc: change to older than 30
the old +3 did not seem to work
2025-12-06 11:28:02 +01:00
julian ebb043b589 format code 2025-12-06 11:24:15 +01:00
julian fcfc9f6450 hm: make it backup conflicting files 2025-12-06 11:24:08 +01:00
julian fe3cd057cd fix regreet with hyprland 2025-12-06 11:23:41 +01:00
julian b9cdb9299e auto-upgrade: commit flake.lock if upgrading worked 2025-12-06 09:22:21 +01:00
julian 8b6ba76848 pianonix: add rpi-ws281x package 2025-12-06 09:22:02 +01:00
julian 2e79bd9e00 nix: do not optimise store on build, but regularly 2025-12-06 09:21:30 +01:00
julian cfdc9f7001 aspi: activate wireguard 2025-12-06 09:21:17 +01:00
julian a12b50edfa pianonix: try getting piano-led-visualizer to run
Still did not work, using raspberrypi os
2025-12-06 09:20:52 +01:00
julian 194d4bcec0 tmux: use vim bindings and better prefix 2025-12-06 09:20:00 +01:00
julian 5badb000be install vagrant and qtcreator 2025-12-06 09:19:38 +01:00
julian 08b3f2c194 emacs: add more tools for c++ and typst development 2025-12-06 09:19:20 +01:00
julian 5f9a110464 update to nixos 25.11 2025-12-06 09:19:06 +01:00
julian bcd041484d Auto-update flake.lock 2025-12-05 14:03:59 +01:00
julian fd3b9f20f0 update flake, add tmux
Update Nix Flake / update-flake (push) Failing after 14s
2025-11-25 20:13:12 +01:00
julian bc160af26a fix open-messaging and workspace assignments
Update Nix Flake / update-flake (push) Failing after 15s
2025-11-17 07:05:41 +01:00
julian a34abd0f05 fix broken programs
Update Nix Flake / update-flake (push) Failing after 14s
2025-11-16 12:24:15 +01:00
julian 2fd1f5ee53 update flake 2025-11-16 12:24:09 +01:00
julian 88547dc82c pianonix: small fixes to make it compile
Update Nix Flake / update-flake (push) Failing after 13s
2025-11-11 10:06:37 +01:00
julian ccf38c2da2 remove broken packages after update 2025-11-11 09:55:54 +01:00
julian b1107ae904 update flake 2025-11-11 09:55:49 +01:00
julian 48f53b3884 first setup of piano-visualizer on pianonix 2025-11-11 09:55:32 +01:00
julian 9bcca96597 aspi firefwall: reactivate checkReversePath
Update Nix Flake / update-flake (push) Failing after 12s
2025-10-28 09:09:03 +01:00
julian 78e219a6cb sops: do not use keyfile makes ssh keys work 2025-10-28 09:09:03 +01:00
julian 8b958d6a56 mdns: try fixes for bug with pianonix 2025-10-28 09:09:03 +01:00
julian 1a1aa20690 pianonix: add bluetooth, fix firefox autostart 2025-10-28 09:09:03 +01:00
julian 54952923f3 fish: add ctrl-space shortcut for zi 2025-10-28 09:09:03 +01:00
julian ca20fa6c35 hm-standalone: add official nix to trusted keys
Update Nix Flake / update-flake (push) Failing after 17s
2025-10-27 11:19:12 +01:00
julian c1b2b51d13 update flake
Update Nix Flake / update-flake (push) Failing after 11s
2025-10-21 20:04:02 +02:00
julian 28f78bb67e flake: add nixos-generators for output pianonix-image 2025-10-21 20:03:46 +02:00
julian 114647aa96 pianonix: update commented wireless networking config 2025-10-21 20:03:25 +02:00
julian 64ae389f27 pianonix: update secrets for new installation 2025-10-21 20:03:12 +02:00
julian fd39dbfcd4 readme: update ssh-to-age command 2025-10-21 20:02:18 +02:00
julian b13cca7173 shell: add nix helper programs
Update Nix Flake / update-flake (push) Failing after 20s
2025-10-20 19:37:44 +02:00
julian 7807091b83 builder: use networkmanager again 2025-10-20 19:37:16 +02:00
julian d3026afb97 update flake 2025-10-20 19:37:05 +02:00
julian 152daf1230 pianonix: multiple improvements, improve secrets, add wireguard, use sheetless in browser 2025-10-20 19:36:24 +02:00
julian ffda398f8d builder: disable autoupgrade
Update Nix Flake / update-flake (push) Failing after 13s
2025-10-09 21:29:40 +02:00
julian 3e179960de builder: simplify network config by using static dns list 2025-10-09 21:28:34 +02:00
julian 93e655ed27 aspi: use wireguard via networkmanager 2025-10-09 21:28:14 +02:00
julian 710c1dedb8 install additional software
Update Nix Flake / update-flake (push) Failing after 13s
2025-10-05 15:36:37 +02:00
julian 28ec5c73d4 format code 2025-10-05 15:36:26 +02:00
julian fc7285bd5c setup pob user for running pob2-frajul 2025-10-05 15:36:06 +02:00
julian 11ee156b29 pipewire: try fixing video conference freeze 2025-10-05 15:34:21 +02:00
julian 2dba549787 builder: setup as jenkins node 2025-10-05 15:33:58 +02:00
julian d28c7d870c add caches to substituters 2025-10-05 15:32:52 +02:00
julian 8bf17e74ef use stable nixos-25.05 instead of unstable 2025-10-05 15:30:41 +02:00
julian 08cf457aa3 neovim: use smartcase search 2025-09-11 08:04:03 +02:00
julian 448002ebf4 update config syntax 2025-09-11 08:03:22 +02:00
julian 9735d3f0c0 frajul-auto-upgrade: restore flake.lock if update failed 2025-09-09 21:47:35 +02:00
julian 8f1b0ade4d user: add to rtkit groups to maybe fix audio 2025-09-09 21:47:08 +02:00
julian db05024dc6 builder: add fallback to substituters 2025-09-09 21:46:36 +02:00
julian 21053dac8c install dig 2025-09-09 21:46:19 +02:00
julian 1ab0bf54fa neovim: fix telescope file_browser, add lsps 2025-09-09 21:46:13 +02:00
julian 5070d4dbfc Add yukari user 2025-09-01 17:24:27 +02:00
julian 12466b4426 frajul-auto-upgrade: re-add lock file usage
Update Nix Flake / update-flake (push) Failing after 11s
2025-08-03 16:05:46 +02:00
julian 23155d57b7 update flake
Update Nix Flake / update-flake (push) Failing after 18s
2025-07-26 08:13:42 +02:00
julian a9e30bd84b Set fallback for binary caches
This makes builds not fail when my own binary cache is offline for some reason
2025-07-26 08:13:02 +02:00
julian e62f6e9dce Fix frajul-auto-upgrade git permission issue 2025-07-26 08:12:43 +02:00
julian c543bc13ea hm: disable warn-dirty
Update Nix Flake / update-flake (push) Failing after 16s
2025-07-12 15:52:17 +02:00
julian b4d1681b99 hyprland: fix waybar by running it with exec-once 2025-07-12 15:51:43 +02:00
julian 6c32ffbe94 frajul-auto-upgrade: only run once a day
Update Nix Flake / update-flake (push) Failing after 14s
2025-07-11 16:22:17 +02:00
julian 6787243414 flake: update 2025-07-11 13:15:42 +02:00
julian d350807e8c builder: do enable auto-upgrades 2025-07-11 13:15:25 +02:00
julian f872c8db0c aspi: enable frajul auto upgrade module and integrate into waybar 2025-07-11 13:15:02 +02:00
julian 8c53c66c4d Add frajul-auto-upgrade module 2025-07-11 13:14:48 +02:00
julian 0f07029660 Add openconnect plugin to networkmanager
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-10 17:50:34 +02:00
julian 8010d771a1 builder: add gitlab-runner
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-09 21:34:52 +02:00
julian 7f4c41429e update flake
Update Nix Flake / update-flake (push) Failing after 15s
2025-07-04 14:44:51 +02:00
julian 6d21fe4262 format code 2025-07-04 14:44:31 +02:00
julian c081f95aaf open-messaging: adapt to new telegram program name 2025-07-04 14:44:01 +02:00
julian 452a34c7e8 Neovim: add clangd 2025-07-04 14:43:51 +02:00
julian 15c4616b91 Fix emacs not having TERMINAL env var 2025-07-04 14:43:45 +02:00
julian 07274a0364 Update alacritty config, use as default 2025-07-04 14:41:58 +02:00
julian 3bb8db1349 Fix builder using itself as remote subsituter 2025-07-04 14:40:58 +02:00
julian 65a3dcdc08 Use ghostty as primary terminal
Update Nix Flake / update-flake (push) Failing after 16s
2025-06-30 08:37:24 +02:00
julian 9fe40bfd13 package rtklib 2025-05-26 21:51:07 +02:00
julian 07943d4f95 format file
Update Nix Flake / update-flake (push) Failing after 12s
2025-05-23 09:59:30 +02:00
julian 815a79ff41 kardorf: fix seahorse and plasma6 config conflict 2025-05-23 09:58:59 +02:00
julian 32ddceba8f kardorf: use i3 instead of hyprland 2025-05-23 09:58:38 +02:00
julian 55ba4125d6 add latex packages to fix org mode exporting
Update Nix Flake / update-flake (push) Failing after 11s
2025-05-21 23:01:09 +02:00
julian b9274f546f update flake 2025-05-21 23:01:03 +02:00
julian fd246d7daf Add hydra-auto-upgrade module, still wip
Update Nix Flake / update-flake (push) Failing after 16s
2025-05-16 13:13:47 +02:00
julian edae0d2bb0 Delete i3 scripts also available in my nix pkgs 2025-05-16 12:56:22 +02:00
julian 1cb23dd0a4 Add todo 2025-05-16 12:53:20 +02:00
julian ab1052193a rename deprecated options 2025-05-16 12:12:22 +02:00
julian 6dadb2008c kardorf: enable ssh access 2025-05-16 12:11:45 +02:00
julian 18f9cc3fa8 Add user julian to dialout for serial port access 2025-05-16 08:27:45 +02:00
julian 9295ad7010 add kardorf ssh key to common secrets.yaml 2025-05-16 08:27:45 +02:00
julian e3cf2379ab yazi: update config to new version 2025-05-16 08:27:45 +02:00
julian f6c3f676b2 update flake 2025-05-16 08:27:45 +02:00
julian d57017382a v3ms: add /snap/bin to path
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-09 11:41:21 +02:00
julian 1d7690eab4 Fix mako settings
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-06 07:50:35 +02:00
julian 67d68a9946 Fix waybar not visible on second monitor after toggling mirroring twice
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-05 15:10:07 +02:00
julian 9af362b5c8 hyprland: quick and dirty screen mirroring 2025-05-05 14:56:22 +02:00
julian a0ae09452f hyprland: install hyprpicker 2025-05-05 08:24:26 +02:00
julian 711859e660 hyprland: fix cursor theme not applied 2025-05-05 08:24:09 +02:00
julian 1c1e496425 use NH_FLAKE instead of FLAKE for nh 2025-05-05 07:11:28 +02:00
julian 97229a521f Add discord to open-messaging 2025-05-05 07:11:02 +02:00
julian 7d8190210b Mako: disable usage of deprecated config value
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-04 20:42:53 +02:00
julian a1dfeff98b topgrade: disable "update flake" step 2025-05-04 20:29:11 +02:00
julian 9e512c2863 Update flake 2025-05-04 20:29:06 +02:00
julian 136653b0fa Use hashed password for julian 2025-05-04 13:52:36 +02:00
julian 75fb0f54ec Delete unused hyprland nixos config 2025-05-04 13:52:27 +02:00
julian a3282f3eb3 Configure kardorf host config 2025-05-04 13:52:13 +02:00
julian 843dfb986d Fix type of monitor.workspaces 2025-05-04 13:51:54 +02:00
julian 3eba0fe092 Make nvidia on kardorf work 2025-05-04 13:51:44 +02:00
julian fdc8b03d9b Add user wolfi 2025-05-04 13:51:22 +02:00
julian d86321cfe6 Add monitor configuration to aspi and kardorf homes 2025-05-04 13:51:00 +02:00
julian 881c930fdb Fix wrong architectures used for v3ms and kardorf 2025-05-04 13:50:36 +02:00
julian dc3f9fe681 Add kardorf ssh key to sops 2025-05-04 13:50:23 +02:00
julian d73ff17327 Delete deprecated .dotter files 2025-05-04 13:49:24 +02:00
julian 67468ba6fa Fix kardorf using aspi config 2025-05-01 22:09:02 +02:00
julian 6d2a7f50df workflow: add git fetch before rebasing
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-30 13:15:25 +02:00
julian 3cf8f19fcc Disable autostart for wireguard comu
Update Nix Flake / update-flake (push) Failing after 14s
2025-04-29 21:44:54 +02:00
julian d335f6c892 builder: fix config
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-28 22:44:33 +02:00
julian 8d94428f77 Fix lsp warnings for clean code 2025-04-28 22:27:16 +02:00
julian 903776dca6 Clean up aspi and home hm config 2025-04-28 22:24:30 +02:00
julian b6dc568215 Rename desktop feature to gtk 2025-04-28 22:24:21 +02:00
julian 130c341816 Remove wallpaper directory 2025-04-28 22:23:42 +02:00
julian 8d0430ae52 Delete unused config file for shells 2025-04-28 22:19:00 +02:00
julian 68da077c72 Format code with alejandra 2025-04-28 22:17:11 +02:00
179 changed files with 2895 additions and 1613 deletions
-61
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"
-6
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"
-4
View File
@@ -1,4 +0,0 @@
[i3.variables]
monitor-primary = "HDMI-1"
monitor-secondary = "eDP-1"
screenlayout-script = "~/.screenlayout/laptop-at-home.sh"
-5
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"
-2
View File
@@ -1,2 +0,0 @@
includes = [".dotter/kardorf.toml"]
packages = ["i3", "emacs", "alacritty", "zsh", "starship", "nix"]
-2
View File
@@ -1,2 +0,0 @@
includes = [".dotter/laptop.toml"]
packages = []
+1
View File
@@ -25,6 +25,7 @@ jobs:
- name: Rebase from master branch - name: Rebase from master branch
shell: bash shell: bash
run: | run: |
git fetch origin master
commits_ahead=$(git rev-list --count HEAD..origin/master) commits_ahead=$(git rev-list --count HEAD..origin/master)
echo "Commits ahead: $commits_ahead" echo "Commits ahead: $commits_ahead"
git log --oneline -5 git log --oneline -5
+4 -9
View File
@@ -1,24 +1,19 @@
keys: keys:
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg - &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4 - &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja - &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
creation_rules: creation_rules:
- path_regex: hosts/common/secrets.yaml$ - path_regex: hosts/secrets-common.yaml$
key_groups: key_groups:
- age: - age:
- *primary - *primary
- *aspi-ssh - *aspi-ssh
- *pianonix-ssh - *kardorf-ssh
- path_regex: hosts/builder/secrets.yaml$ - path_regex: hosts/builder/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *primary - *primary
- *builder-ssh - *builder-ssh
- path_regex: hosts/pianonix/secrets.yaml$
key_groups:
- age:
- *primary
- *pianonix-ssh
+8 -3
View File
@@ -1,7 +1,12 @@
#+title: My dotfiles #+title: My dotfiles
My dotfiles for which I am using =nix=. * Quick start for home-manger only (no need to pull this repo)
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]] - Install nix using the https://github.com/DeterminateSystems/nix-installer
- Then run
#+begin_src shell
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
#+end_src
- Done
* Machine selection * Machine selection
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them: =home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
@@ -24,7 +29,7 @@ sops edit secrets/secrets.yaml
** Authorize new device ** Authorize new device
- Generate public key from ssh -> Private age key generation not needed - Generate public key from ssh -> Private age key generation not needed
#+begin_src sh #+begin_src sh
ssh-to-age < /etc/ssh/ssh_host_ed25519_key ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
#+end_src #+end_src
- Add age public key to file:.sops.yaml - Add age public key to file:.sops.yaml
- Update keys - Update keys
+16
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";
};
}
@@ -1,11 +1,11 @@
# Common config for all hosts # Common config for all hosts
{ {
inputs, inputs,
outputs, outputs,
pkgs,
lib,
... ...
}: }: {
{
imports = imports =
[ [
./fish.nix # fish for admin ./fish.nix # fish for admin
@@ -24,15 +24,24 @@
hardware.enableRedistributableFirmware = true; hardware.enableRedistributableFirmware = true;
# Networking # Networking
networking.networkmanager.enable = true; networking.networkmanager = {
services.resolved.enable = true; enable = true;
plugins = with pkgs; [
networkmanager-openconnect
];
};
services.resolved.enable = false;
# MDNS Taken by avahi
# networking.networkmanager.dns = "none";
networking.nameservers = lib.mkDefault [
"1.1.1.1"
"8.8.8.8"
];
programs.dconf.enable = true; # HM module
home-manager.useGlobalPkgs = true; # hm module uses the pkgs of the nixos config
# HM home-manager.backupFileExtension = "hm-backup"; # backup conflicting files. So hm activation never fails
home-manager.useGlobalPkgs = true;
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
inherit inputs outputs; inherit inputs outputs;
}; };
} }
@@ -1,15 +1,10 @@
{ {outputs, ...}: {
lib,
outputs,
...
}:
{
# Apply overlays # Apply overlays
nixpkgs = { nixpkgs = {
# TODO: apply this to hm and nixos without duplicate code # TODO: apply this to hm and nixos without duplicate code
overlays = builtins.attrValues outputs.overlays; overlays = builtins.attrValues outputs.overlays;
config = { config = {
nvidia.acceptLicense = true;
allowUnfree = true; allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this allowUnfreePredicate = _: true; # TODO: what is this
warn-dirty = false; warn-dirty = false;
@@ -19,7 +14,9 @@
}; };
}; };
nix.settings.auto-optimise-store = lib.mkDefault true; # optimize at every build, slows down builds
# better to do optimise.automatic for regular optimising
# nix.settings.auto-optimise-store = lib.mkDefault true;
nix.settings.experimental-features = [ nix.settings.experimental-features = [
"nix-command" "nix-command"
"flakes" "flakes"
@@ -27,31 +24,16 @@
]; ];
# warn-dirty = false; # 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"
]; # needed for devenv to add custom caches
};
nix.gc = { nix.gc = {
automatic = true; automatic = true;
dates = "weekly"; dates = "weekly";
# Keep the last 3 generations options = "--delete-older-than 30d";
options = "--delete-older-than +3"; persistent = true;
};
nix.optimise = {
automatic = true;
dates = ["weekly"]; # Optional; allows customizing optimisation schedule
persistent = true;
}; };
programs.nix-ld.enable = true; programs.nix-ld.enable = true;
@@ -61,5 +43,4 @@
# Add each flake input as a registry and nix_path # Add each flake input as a registry and nix_path
# registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs; # registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
# nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs; # nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
} }
@@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
# Packages needed as root # Packages needed as root
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
vim vim
@@ -1,25 +1,23 @@
{ {
pwd,
inputs, inputs,
config, config,
... ...
}: }: let
let
isEd25519 = k: k.type == "ed25519"; isEd25519 = k: k.type == "ed25519";
getKeyPath = k: k.path; getKeyPath = k: k.path;
keys = builtins.filter isEd25519 config.services.openssh.hostKeys; keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
in in {
{ imports = [inputs.sops-nix.nixosModules.sops];
imports = [ inputs.sops-nix.nixosModules.sops ];
sops.age = { sops.age = {
sshKeyPaths = map getKeyPath keys; sshKeyPaths = map getKeyPath keys;
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!) # TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
keyFile = "/home/julian/.config/sops/age/keys.txt"; # 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 # Generate key if none of the above worked. With this, building will still work, just without secrets
generateKey = true; generateKey = false; # TODO: building should not work without secrets!?
}; };
sops.defaultSopsFile = ../secrets.yaml; sops.defaultSopsFile = "${pwd}/hosts/secrets-common.yaml";
} }
@@ -1,17 +1,22 @@
{ pkgs, ... }:
{ {
pkgs,
lib,
...
}: {
# Make programs like nextcloud client access saved passwords # Make programs like nextcloud client access saved passwords
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true; 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 # Make authentication work for e.g. gparted
security.polkit.enable = true; security.polkit.enable = true;
systemd = { systemd = {
user.services.polkit-gnome-authentication-agent-1 = { user.services.polkit-gnome-authentication-agent-1 = {
description = "polkit-gnome-authentication-agent-1"; description = "polkit-gnome-authentication-agent-1";
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
wants = [ "graphical-session.target" ]; wants = ["graphical-session.target"];
after = [ "graphical-session.target" ]; after = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
Type = "simple"; Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
@@ -3,7 +3,10 @@
services.avahi = { services.avahi = {
enable = true; enable = true;
nssmdns4 = true; nssmdns4 = true;
nssmdns6 = true;
publish.enable = true; publish.enable = true;
publish.addresses = true; publish.addresses = true;
ipv4 = true;
ipv6 = true;
}; };
} }
+31
View File
@@ -0,0 +1,31 @@
{
lib,
outputs,
...
}: {
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de"
"https://devenv.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
];
trusted-users = [
"root"
"@wheel"
]; # needed for devenv to add custom caches
# Ensure we can still build when missing-server is not accessible
fallback = true;
};
}
@@ -1,10 +1,6 @@
{ {pkgs, ...}: {
pkgs,
...
}:
{
services.flatpak.enable = true; services.flatpak.enable = true;
xdg.portal.enable = true; xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
xdg.portal.config.common.default = "*"; # Use first portal implementation found xdg.portal.config.common.default = "*"; # Use first portal implementation found
} }
@@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.gamemode = { programs.gamemode = {
enable = true; enable = true;
settings = { settings = {
@@ -20,5 +18,4 @@
}; };
}; };
}; };
} }
@@ -3,10 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
services.xserver.displayManager.gdm = { services.xserver.displayManager.gdm = {
enable = true; enable = true;
}; };
+37
View File
@@ -0,0 +1,37 @@
{config, ...}: let
homeCfgs = config.home-manager.users;
julianCfg = homeCfgs.julian;
in {
users.extraUsers.greeter = {
# For caching
home = "/tmp/greeter-home";
createHome = true;
};
programs.regreet = {
enable = true;
iconTheme = julianCfg.gtk.iconTheme;
theme = julianCfg.gtk.theme;
# font = julianCfg.fontProfiles.regular; # TODO: do
cursorTheme = {
inherit (julianCfg.gtk.cursorTheme) name package;
};
cageArgs = [
"-s"
"-m"
"last"
]; # multimonitor use last monitor
# settings.background = {
# path = julianCfg.wallpaper;
# fit = "Cover";
# }; # TODO: fix
# TODO: setting keyboard language does not work
# settings = {
# env = {
# XKB_DEFAULT_LAYOUT = "de";
# # XKB_DEFAULT_VARIANT = "altgr-intl";
# };
# };
};
}
@@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
services.xserver.windowManager.i3.enable = true; services.xserver.windowManager.i3.enable = true;
services.xserver.windowManager.i3.package = pkgs.i3-gaps; services.xserver.windowManager.i3.package = pkgs.i3-gaps;
services.displayManager.defaultSession = "none+i3"; services.displayManager.defaultSession = "none+i3";
@@ -1,5 +1,4 @@
{ {
security.krb5.enable = true; security.krb5.enable = true;
security.krb5.settings = { security.krb5.settings = {
# domain_realm = { # domain_realm = {
@@ -15,7 +14,7 @@
}; };
realms = { realms = {
"julian-mutter.de" = { "julian-mutter.de" = {
kdc = [ "kerberos.julian-mutter.de" ]; kdc = ["kerberos.julian-mutter.de"];
admin_server = "kerberos-admin.julian-mutter.de"; admin_server = "kerberos-admin.julian-mutter.de";
default_domain = "julian-mutter.de"; default_domain = "julian-mutter.de";
}; };
@@ -3,11 +3,9 @@
lib, lib,
config, config,
... ...
}: }: let
let
hosts = lib.attrNames outputs.nixosConfigurations; hosts = lib.attrNames outputs.nixosConfigurations;
in in {
{
services.openssh = { services.openssh = {
enable = true; enable = true;
settings = { settings = {
@@ -15,7 +13,7 @@ in
PasswordAuthentication = false; PasswordAuthentication = false;
PermitRootLogin = "no"; PermitRootLogin = "no";
# TODO: what does this d # TODO: what does this do
# Let WAYLAND_DISPLAY be forwarded # Let WAYLAND_DISPLAY be forwarded
AcceptEnv = "WAYLAND_DISPLAY"; AcceptEnv = "WAYLAND_DISPLAY";
X11Forwarding = true; X11Forwarding = true;
@@ -36,7 +34,7 @@ in
# publicKeyFile = ../../${hostname}/ssh_host_ed25519_key.pub; # publicKeyFile = ../../${hostname}/ssh_host_ed25519_key.pub;
# extraHostNames = # extraHostNames =
# [ # [
# "${hostname}.m7.rs" # # "${hostname}.m7.rs"
# ] # ]
# ++ # ++
# # Alias for localhost if it's the same host # # Alias for localhost if it's the same host
@@ -48,5 +46,4 @@ in
# ]); # ]);
# }); # });
# }; # };
} }
@@ -1,11 +1,7 @@
{ {pkgs, ...}: {
pkgs,
...
}:
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
shared-mime-info # extended mimetype support shared-mime-info # extended mimetype support
lxde.lxmenu-data # open with "Installed Applications" lxmenu-data # open with "Installed Applications"
pcmanfm pcmanfm
]; ];
@@ -3,6 +3,7 @@
services.pulseaudio.enable = false; services.pulseaudio.enable = false;
services.pipewire = { services.pipewire = {
enable = true; enable = true;
wireplumber.enable = true;
alsa.enable = true; alsa.enable = true;
alsa.support32Bit = true; alsa.support32Bit = true;
pulse.enable = true; pulse.enable = true;
@@ -14,6 +15,14 @@
"module.x11.bell" = false; "module.x11.bell" = false;
}; };
}; };
"10-increase-buffer" = {
"context.properties" = {
"default.clock.rate" = 48000;
"default.clock.quantum" = 1024;
"default.clock.min-quantum" = 1024;
"default.clock.max-quantum" = 2048;
};
};
}; };
}; };
} }
@@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
dockerEnabled = config.virtualisation.docker.enable; dockerEnabled = config.virtualisation.docker.enable;
in in {
{
virtualisation.podman = { virtualisation.podman = {
enable = true; enable = true;
dockerCompat = !dockerEnabled; dockerCompat = !dockerEnabled;
@@ -3,10 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# Set location used by redshift # Set location used by redshift
location.provider = "manual"; location.provider = "manual";
location.latitude = 47.92; location.latitude = 47.92;
@@ -19,7 +19,7 @@
"big-parallel" "big-parallel"
"kvm" "kvm"
]; ];
mandatoryFeatures = [ ]; mandatoryFeatures = [];
} }
# { # {
# hostName = "localhost"; # hostName = "localhost";
@@ -3,10 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
programs.thunar.enable = true; programs.thunar.enable = true;
programs.xfconf.enable = true; # Persist saved preferences programs.xfconf.enable = true; # Persist saved preferences
programs.thunar.plugins = with pkgs.xfce; [ programs.thunar.plugins = with pkgs.xfce; [
@@ -3,13 +3,10 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
virtualisation.virtualbox.host.enable = true; virtualisation.virtualbox.host.enable = true;
# virtualisation.virtualbox.host.enableExtensionPack = true; # virtualisation.virtualbox.host.enableExtensionPack = true;
# virtualisation.virtualbox.guest.enable = true; # virtualisation.virtualbox.guest.enable = true;
# virtualisation.virtualbox.guest.x11 = true; # virtualisation.virtualbox.guest.x11 = true;
users.extraGroups.vboxusers.members = [ "julian" ]; users.extraGroups.vboxusers.members = ["julian"];
} }
@@ -6,6 +6,7 @@
}; };
comu = { comu = {
configFile = "/etc/wireguard/comu.conf"; configFile = "/etc/wireguard/comu.conf";
autostart = false;
}; };
}; };
} }
+9
View File
@@ -0,0 +1,9 @@
{
programs.wireshark = {
enable = true;
dumpcap.enable = true;
usbmon.enable = true;
};
users.users.julian.extraGroups = ["wireshark"];
}
@@ -1,13 +1,12 @@
{ {
pwd,
pkgs, pkgs,
config, config,
lib, lib,
... ...
}: }: let
let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups; ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in in {
{
users.mutableUsers = false; users.mutableUsers = false;
users.users.julian = { users.users.julian = {
description = "Julian"; description = "Julian";
@@ -19,31 +18,34 @@ in
"networkmanager" "networkmanager"
"wheel" "wheel"
"audio" "audio"
"realtime"
"rtkit"
"network" "network"
"video" "video"
"podman" "podman"
"docker" "docker"
"git" "git"
"gamemode" "gamemode"
"dialout"
]; ];
openssh.authorizedKeys.keys = lib.splitString "\n" ( openssh.authorizedKeys.keys = lib.splitString "\n" (
builtins.readFile ../../../../homes/julian/ssh.pub builtins.readFile ./ssh.pub
); );
hashedPasswordFile = config.sops.secrets.julian-password.path; # hashedPasswordFile = config.sops.secrets.julian-password.path;
packages = [ pkgs.home-manager ]; hashedPassword = "$y$j9T$N33kLJQbV8soUoCbDkpwA1$r/yahJDgOPo4GGOrAi6BUG5zLTzmaBrA5NQ4nno561A";
packages = [pkgs.home-manager];
}; };
users.groups.julian = { users.groups.julian = {
gid = 1000; gid = 1000;
}; };
sops.secrets.julian-password = { sops.secrets.julian-password = {
sopsFile = ../../secrets.yaml; sopsFile = "${pwd}/hosts/secrets-common.yaml";
neededForUsers = true; neededForUsers = true;
}; };
home-manager.users.julian = import ../../../../homes/julian/${config.networking.hostName}.nix; home-manager.users.julian = import "${pwd}/homes/julian/${config.networking.hostName}.nix";
security.pam.services.swaylock = { }; # Make swaylock unlocking work
security.pam.services.swaylock = {}; # Make swaylock unlocking work
} }
+30
View File
@@ -0,0 +1,30 @@
{
pkgs,
config,
...
}: let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
users.mutableUsers = false;
users.users.wolfi = {
description = "Wolfi";
group = "wolfi";
isNormalUser = true;
shell = pkgs.fish;
extraGroups = ifTheyExist [
"networkmanager"
"wheel"
"audio"
"network"
"video"
"podman"
"docker"
"git"
"gamemode"
];
hashedPassword = "$y$j9T$ifzWjoZaRtPUOOfMYnbJ20$uFOO1EyDApL52vRUicZYgupaTA/a6sGNUj3imZ/lcb6";
packages = [pkgs.home-manager];
};
users.groups.wolfi = {};
}
Generated
+858 -98
View File
File diff suppressed because it is too large Load Diff
+93 -122
View File
@@ -2,16 +2,25 @@
description = "Home Manager configuration of julian"; description = "Home Manager configuration of julian";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
systems.url = "github:nix-systems/default-linux"; systems.url = "github:nix-systems/default-linux";
nixos-hardware.url = "github:nixos/nixos-hardware"; nixos-hardware.url = "github:nixos/nixos-hardware";
impermanence.url = "github:nix-community/impermanence"; impermanence.url = "github:nix-community/impermanence";
nix-colors.url = "github:misterio77/nix-colors"; nix-colors.url = "github:misterio77/nix-colors";
deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.url = "github:serokell/deploy-rs";
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
sops-nix = { sops-nix = {
@@ -28,16 +37,12 @@
}; };
# Various flakes # Various flakes
alacritty-theme = {
url = "github:alacritty/alacritty-theme";
flake = false;
};
yazi-flavors = { yazi-flavors = {
url = "github:yazi-rs/flavors"; url = "github:yazi-rs/flavors";
flake = false; flake = false;
}; };
nixvim = { nixvim = {
url = "github:nix-community/nixvim"; url = "github:nix-community/nixvim/nixos-25.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-matlab = { nix-matlab = {
@@ -56,133 +61,99 @@
}; };
}; };
outputs = outputs = {
{ self,
self, nixpkgs,
nixpkgs, home-manager,
home-manager, systems,
systems, ...
... } @ inputs: let
}@inputs: inherit (self) outputs;
let lib = nixpkgs.lib // home-manager.lib;
inherit (self) outputs; forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
lib = nixpkgs.lib // home-manager.lib; pkgsFor = lib.genAttrs (import systems) (
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system}); system:
pkgsFor = lib.genAttrs (import systems) (
system:
import nixpkgs { import nixpkgs {
inherit system; inherit system;
config.allowUnfree = true; config.allowUnfree = true;
config.permittedInsecurePackages = [
"olm-3.2.16"
];
warn-dirty = false;
} }
); );
in in {
{ inherit lib;
inherit lib;
nixosModules = import ./modules/nixos; nixosModules = import ./modules/nixos;
homeManagerModules = import ./modules/home-manager; homeManagerModules = import ./modules/home-manager;
overlays = import ./overlays { inherit inputs outputs; }; overlays = import ./overlays {inherit inputs outputs;};
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
packages = forEachSystem (pkgs: import ./pkgs { inherit pkgs; }); packages = forEachSystem (pkgs: import ./packages {inherit pkgs;});
devShells = forEachSystem (pkgs: import ./shell.nix { inherit pkgs; }); devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
formatter = forEachSystem (pkgs: pkgs.alejandra); formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt *
nixosConfigurations = { nixosConfigurations = {
# Main laptop # Main laptop
aspi = lib.nixosSystem { aspi = lib.nixosSystem {
modules = [ ./hosts/aspi ]; modules = [
specialArgs = { ./hosts/aspi
inherit inputs outputs; ];
}; specialArgs = {
}; inherit inputs outputs;
# Piano raspberry pi pwd = "${self}";
pianonix = lib.nixosSystem {
modules = [ ./hosts/pianonix ];
specialArgs = {
inherit inputs outputs;
};
};
kardorf = lib.nixosSystem {
modules = [ ./hosts/pianonix ];
specialArgs = {
inherit inputs outputs;
};
}; };
}; };
kardorf = lib.nixosSystem {
# Standalone HM modules = [./hosts/kardorf];
homeConfigurations = { specialArgs = {
# Main laptop inherit inputs outputs;
"julian@aspi" = lib.homeManagerConfiguration { pwd = "${self}";
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.aarch64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
"julian@v3ms" = lib.homeManagerConfiguration {
modules = [
./homes/julian/v3ms
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.aarch64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
}; };
}; };
builder = lib.nixosSystem {
# deploy-rs node configuration modules = [./hosts/builder];
deploy.nodes = { specialArgs = {
pianonix = { inherit inputs outputs;
hostname = "pianonix.local"; pwd = "${self}";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
};
};
builder = {
hostname = "builder.julian-mutter.de";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
remoteBuild = true;
};
}; };
}; };
}; };
# Standalone HM
homeConfigurations = {
"julian@v3ms" = lib.homeManagerConfiguration {
modules = [
./homes/julian/v3ms
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
pwd = "${self}";
};
};
"julian@quickstart" = lib.homeManagerConfiguration {
modules = [
./homes/julian/quickstart.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
pwd = "${self}";
};
};
};
# deploy-rs node configuration
deploy.nodes = {
builder = {
hostname = "builder.julian-mutter.de";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
remoteBuild = true;
};
};
};
};
} }
+35 -7
View File
@@ -1,30 +1,58 @@
{ {
imports = [ imports = [
./global ./global
./features/fish ./features/fish
./features/direnv ./features/direnv
./features/topgrade ./features/topgrade
./features/neovim ./features/neovim
./features/kitty ./features/ghostty
./features/wezterm ./features/wezterm
./features/alacritty ./features/alacritty
./features/yazi ./features/yazi
./features/emacs ./features/emacs
# ./features/i3 ./features/tmux
./features/qt-distrobox
./features/hyprland ./features/hyprland
./features/nix-helper
./features/desktop
./features/suites/cli ./features/suites/cli
./features/suites/desktop ./features/suites/desktop
./features/suites/development ./features/suites/development
]; ];
hostName = "aspi"; hostName = "aspi";
is-nixos = true; is-nixos = true;
terminal = "kitty"; 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"
];
}
];
} }
@@ -1,3 +0,0 @@
import = [
"~/.config/alacritty/theme/themes/smoooooth.toml"
]
+5 -10
View File
@@ -1,17 +1,12 @@
{ {
lib, lib,
pkgs,
inputs,
config, config,
... ...
}: }: {
programs.alacritty = {
{ enable = true;
home.packages = with pkgs; [ alacritty ]; settings = {};
theme = "smoooooth";
home.file = {
".config/alacritty/theme".source = "${inputs.alacritty-theme}";
".config/alacritty/alacritty.toml".source = ./alacritty.toml;
}; };
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty"; home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";
Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 759 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1024 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 861 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 595 KiB

+44 -17
View File
@@ -4,24 +4,19 @@
config, config,
... ...
}: }:
with lib; let
with lib;
let
doomRepoUrl = "https://github.com/doomemacs/doomemacs"; doomRepoUrl = "https://github.com/doomemacs/doomemacs";
configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config"; configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config";
in in {
{ home.sessionPath = ["/home/julian/.config/emacs/bin"];
home.sessionPath = [ "/home/julian/.config/emacs/bin" ];
home.packages = home.packages = with pkgs;
with pkgs;
[ [
binutils # native-comp needs 'as', provided by this binutils # native-comp needs 'as', provided by this
## Doom dependencies ## Doom dependencies
git git
(ripgrep.override { withPCRE2 = true; }) (ripgrep.override {withPCRE2 = true;})
## Optional dependencies ## Optional dependencies
fd # faster projectile indexing fd # faster projectile indexing
@@ -30,12 +25,13 @@ in
## Module dependencies ## Module dependencies
(aspellWithDicts ( (aspellWithDicts (
ds: with ds; [ ds:
en with ds; [
en-computers en
en-science en-computers
de en-science
] de
]
)) ))
hunspell hunspell
@@ -46,6 +42,8 @@ in
# Code formatters for use with doom emacs # Code formatters for use with doom emacs
nixfmt-rfc-style # nix nixfmt-rfc-style # nix
alejandra # nix
nixd # nix lsp nixd # nix lsp
dockfmt # docker dockfmt # docker
google-java-format # java google-java-format # java
@@ -54,6 +52,14 @@ in
shfmt shfmt
pyright pyright
clang-tools # c++ lsp etc clang-tools # c++ lsp etc
ccls # alternative c++ lsp
cmake
bear
cmake-language-server
# qt6.full # qt tools and libs including lsp
tinymist # typst lsp
ltex-ls # latex languagetool ltex-ls # latex languagetool
graphviz graphviz
@@ -61,10 +67,31 @@ in
# neocmakelsp # cmake # neocmakelsp # cmake
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
frajul.typst-languagetool
ltex-ls-plus
(texlive.combine {
inherit
(texlive)
scheme-basic
# for rendering latex in inkscape
standalone
amsmath
preview
# needed for org mode preview
dvisvgm
dvipng # for preview and export as html
wrapfig
# amsmath
ulem
hyperref
capt-of
;
})
] ]
++ lib.optional config.is-nixos emacs; ++ lib.optional config.is-nixos emacs;
home.activation.installDoomEmacs = lib.hm.dag.entryAfter [ "writeBoundary" ] '' home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [ ! -d "/home/julian/.config/emacs" ]; then if [ ! -d "/home/julian/.config/emacs" ]; then
$DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs" $DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs"
fi fi
+12 -6
View File
@@ -3,10 +3,7 @@
pkgs, pkgs,
... ...
}: }:
with lib; {
with lib;
{
home.file = { home.file = {
".config/starship.toml".source = ./starship.toml; ".config/starship.toml".source = ./starship.toml;
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish; ".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;
@@ -30,6 +27,11 @@ with lib;
enableFishIntegration = true; enableFishIntegration = true;
}; };
programs.zoxide = {
enable = true;
enableFishIntegration = true;
};
programs.fish = { programs.fish = {
enable = true; enable = true;
@@ -41,14 +43,18 @@ with lib;
cd $argv cd $argv
''; '';
run = '' run = ''
nix run nixpkgs#"$argv[1]" -- $argv[2..-1] nix run --impure nixpkgs#"$argv[1]" -- $argv[2..-1]
''; '';
shell = '' shell = ''
set args set args
for arg in $argv for arg in $argv
set args $args nixpkgs#$arg set args $args nixpkgs#$arg
end end
nix shell $args nix shell --impure $args
'';
fish_user_key_bindings = ''
bind ctrl-space 'zi; commandline -f repaint'
bind -M insert ctrl-space 'zi; commandline -f repaint'
''; '';
}; };
}; };
+2 -6
View File
@@ -1,13 +1,9 @@
{ {
lib, lib,
pkgs, pkgs,
config,
... ...
}: }:
with lib; {
with lib;
{
fonts.fontconfig.enable = true; # required to autoload fonts from packages fonts.fontconfig.enable = true; # required to autoload fonts from packages
home.packages = with pkgs; [ home.packages = with pkgs; [
nerd-fonts.fira-code nerd-fonts.fira-code
@@ -15,7 +11,7 @@ with lib;
dejavu_fonts dejavu_fonts
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-emoji noto-fonts-color-emoji
liberation_ttf liberation_ttf
fira-code fira-code
fira-code-symbols fira-code-symbols
@@ -9,6 +9,5 @@
settings = { settings = {
general.adjustment-method = "wayland"; general.adjustment-method = "wayland";
}; };
}; };
} }
+16
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";
}
@@ -3,13 +3,11 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit (inputs.nix-colors.lib-contrib {inherit pkgs;}) gtkThemeFromScheme;
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) gtkThemeFromScheme; in {
in
{
# Do not make conditional, just toggle things on and off # Do not make conditional, just toggle things on and off
imports = [ inputs.nix-colors.homeManagerModules.default ]; # TODO: what does this do imports = [inputs.nix-colors.homeManagerModules.default]; # TODO: what does this do
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark"; # home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
gtk = { gtk = {
@@ -26,9 +24,10 @@ in
}; };
cursorTheme = { cursorTheme = {
package = pkgs.apple-cursor; package = pkgs.apple-cursor;
name = "macOS-BigSur"; name = "macOS";
size = 24; size = 24;
}; };
}; };
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
} }
+115 -46
View File
@@ -4,14 +4,12 @@
config, config,
lib, lib,
... ...
}: }: let
inherit
let (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{
imports = [ imports = [
# inputs.hyprland.homeManagerModules.default # inputs.hyprland.homeManagerModules.default
./waybar ./waybar
@@ -26,11 +24,11 @@ in
./zathura.nix ./zathura.nix
./waypipe.nix ./waypipe.nix
./hyprbars.nix # ./hyprbars.nix
]; ];
xdg.portal = { xdg.portal = {
extraPortals = [ pkgs.xdg-desktop-portal-wlr ]; extraPortals = [pkgs.xdg-desktop-portal-wlr];
config.hyprland = { config.hyprland = {
default = [ default = [
"wlr" "wlr"
@@ -42,15 +40,29 @@ in
programs.imv.enable = true; # TODO: what is that programs.imv.enable = true; # TODO: what is that
home.packages = with pkgs; [ home.packages = with pkgs; [
# hyprpicker # TODO hyprpicker
# hyprcursor # TODO
brightnessctl brightnessctl
# grimblast
frajul.hyprshot-gui frajul.hyprshot-gui
frajul.wl-ocr frajul.wl-ocr
wf-recorder wf-recorder
wl-clipboard 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 = { services.cliphist = {
@@ -140,14 +152,61 @@ in
# hyprlandPlugins.hyprbars # hyprlandPlugins.hyprbars
]; ];
submaps = {
"resize".settings = {
binde = [
", right, resizeactive, 20"
", left, resizeactive, -20 0"
", up, resizeactive, 0 -20"
", down, resizeactive, 0 20"
", l, resizeactive, 20"
", h, resizeactive, -20 0"
", k, resizeactive, 0 -20"
", j, resizeactive, 0 20"
];
bind = [
", q, submap, reset"
", escape, submap, reset"
", catchall, submap, reset" # make any other keypress cancel the submap
];
};
"open, reset".settings = {
bind = [
", e, exec, emacs"
", m, exec, open-messaging"
", b, exec, firefox"
", catchall, submap, reset" # make any other keypress cancel the submap
];
};
};
# Disable animations for selection, fixes screenshots
extraConfig = ''
# layerrule {
# name = no_anim_for_selection
# no_anim = on
# match:namespace = selection
# }
layerrule = noanim, selection
'';
settings = { settings = {
"$mod" = "SUPER"; "$mod" = "SUPER";
# Environment variables programs like emacs have access to
env = "TERMINAL,${config.terminal}";
# Monitors # Monitors
monitor = ",preferred,auto,auto"; monitor = ",preferred,auto,1";
# Autostart # Autostart
exec-once = [ "firefox" ]; exec-once = [
(lib.getExe pkgs.firefox)
(lib.getExe pkgs.waybar)
];
# Look and Feel # Look and Feel
general = { general = {
@@ -198,6 +257,7 @@ in
exec = [ exec = [
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}" "hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
"correct-workspace-locations"
]; ];
misc = { misc = {
@@ -209,6 +269,10 @@ in
vfr = true; # power saving vfr = true; # power saving
}; };
cursor = {
no_hardware_cursors = 1; # disable hardware cursors to fix tearing on kardorf
};
render = { render = {
# we do, in fact, want direct scanout # we do, in fact, want direct scanout
direct_scanout = true; direct_scanout = true;
@@ -225,7 +289,10 @@ in
windowrulev2 = [ windowrulev2 = [
"suppressevent maximize, class:.*" "suppressevent maximize, class:.*"
"workspace 1, class:firefox" "workspace 1, class:firefox"
"workspace 8, class:Zotero"
"workspace 9, class:nheko" "workspace 9, class:nheko"
"workspace 9, class:Element"
"workspace 9, class:discord"
"workspace 9, class:org.telegram.desktop" "workspace 9, class:org.telegram.desktop"
"workspace 10, class:thunderbird" "workspace 10, class:thunderbird"
"float, class:qalculate-gtk" "float, class:qalculate-gtk"
@@ -233,23 +300,17 @@ in
]; ];
# Workspace rules # Workspace rules
workspace = [ workspace =
"1, monitor:HDMI-A-1" [
"2, monitor:HDMI-A-1" # smart gaps (none when only one window in workspace)
"3, monitor:HDMI-A-1" "w[t1], gapsin:0, gapsout:0, border:1"
"4, monitor:HDMI-A-1" "w[tg1], gapsin:0, gapsout:0, border:1"
"5, monitor:HDMI-A-1" "f[1], gapsin:0, gapsout:0, border:1"
"6, monitor:eDP-1" ]
"7, monitor:eDP-1" # builds like "1, e-DP1" "2, HDMI-1" etc.
"8, monitor:eDP-1" ++ builtins.concatLists (
"9, monitor:eDP-1" map (monitor: map (ws: "${ws}, monitor:${monitor.name}") monitor.workspaces) config.monitors
"10, monitor:eDP-1" );
# 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"
];
# Mouse binds # Mouse binds
bindm = [ bindm = [
@@ -261,17 +322,23 @@ in
bind = bind =
[ [
# compositor commands # compositor commands
"$mod, Space, focuswindow, floating" #
"$mod SHIFT, Space, togglefloating," #
"$mod, R, submap, resize"
"$mod, O, submap, open"
#
"$mod, SPACE, focuswindow, floating"
"$mod SHIFT, SPACE, togglefloating,"
"$mod, F, fullscreen," "$mod, F, fullscreen,"
"$mod, X, killactive," "$mod, X, killactive,"
"$mod, O, togglesplit," # dwindle "$mod, -, togglesplit," # dwindle
# opening applications # opening applications
"$mod, D, exec, wofi --show drun,run" "$mod, D, exec, wofi --show drun,run"
"$mod, E, exec, pcmanfm" "$mod, E, exec, pcmanfm"
"$mod, Return, exec, kitty" "$mod, Return, exec, ${config.terminal}"
"$mod, B, exec, firefox" "$mod, B, exec, firefox"
"$mod, C, exec, qalculate-gtk" "$mod, C, exec, qalculate-gtk"
@@ -279,7 +346,9 @@ in
"$mod SHIFT, E, exec, wlogout -p layer-shell" "$mod SHIFT, E, exec, wlogout -p layer-shell"
"$mod, Escape, exec, wlogout -p layer-shell" "$mod, Escape, exec, wlogout -p layer-shell"
"$mod SHIFT, R, exec, hyprctl reload" "$mod SHIFT, R, exec, hyprctl reload"
"$mod, Print, exec, hyprshot-gui"
", Print, exec, hyprshot-gui" ", Print, exec, hyprshot-gui"
"$mod, P, exec, toggle-screen-mirroring; correct-workspace-locations"
# "$mod SHIFT, E, exec, pkill Hyprland" # "$mod SHIFT, E, exec, pkill Hyprland"
# "$mod, G, togglegroup," # "$mod, G, togglegroup,"
@@ -356,26 +425,26 @@ in
"$mod CTRL, 0, movetoworkspacesilent, 10" "$mod CTRL, 0, movetoworkspacesilent, 10"
] ]
++ ++
# Screen lock # Screen lock
( (
let let
swaylock = lib.getExe config.programs.swaylock.package; swaylock = lib.getExe config.programs.swaylock.package;
in in
lib.optionals config.programs.swaylock.enable [ lib.optionals config.programs.swaylock.enable [
"$mod,TAB,exec,${swaylock} --daemonize" "$mod,TAB,exec,${swaylock} --daemonize"
] ]
) )
++ ++
# Notification manager # Notification manager
( (
let let
makoctl = lib.getExe' config.services.mako.package "makoctl"; makoctl = lib.getExe' config.services.mako.package "makoctl";
in in
lib.optionals config.services.mako.enable [ lib.optionals config.services.mako.enable [
"$mod,w,exec,${makoctl} dismiss" "$mod,w,exec,${makoctl} dismiss"
"$mod SHIFT,W,exec,${makoctl} restore" "$mod SHIFT,W,exec,${makoctl} restore"
] ]
); );
# plugin = { # plugin = {
# hyprbars = { # hyprbars = {
+26 -30
View File
@@ -4,8 +4,7 @@
lib, lib,
outputs, outputs,
... ...
}: }: let
let
getHostname = x: lib.last (lib.splitString "@" x); getHostname = x: lib.last (lib.splitString "@" x);
# remoteColorschemes = lib.mapAttrs' (n: v: { # remoteColorschemes = lib.mapAttrs' (n: v: {
# name = getHostname n; # name = getHostname n;
@@ -19,18 +18,17 @@ let
# Make sure it's using the same hyprland package as we are # Make sure it's using the same hyprland package as we are
hyprland = config.wayland.windowManager.hyprland.package; hyprland = config.wayland.windowManager.hyprland.package;
}).overrideAttrs }).overrideAttrs
(old: { (old: {
# Yeet the initialization notification (I hate it) # Yeet the initialization notification (I hate it)
postPatch = postPatch =
(old.postPatch or "") (old.postPatch or "")
+ '' + ''
${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp ${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp
''; '';
}); });
in in {
{
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
plugins = [ hyprbars ]; plugins = [hyprbars];
settings = { settings = {
"plugin:hyprbars" = { "plugin:hyprbars" = {
bar_height = 25; bar_height = 25;
@@ -40,25 +38,23 @@ in
# bar_text_size = config.fontProfiles.regular.size; # bar_text_size = config.fontProfiles.regular.size;
bar_part_of_window = true; bar_part_of_window = true;
bar_precedence_over_border = true; bar_precedence_over_border = true;
hyprbars-button = hyprbars-button = let
let closeAction = "hyprctl dispatch killactive";
closeAction = "hyprctl dispatch killactive";
isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null''; isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null'';
moveToSpecial = "hyprctl dispatch movetoworkspacesilent special"; moveToSpecial = "hyprctl dispatch movetoworkspacesilent special";
moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')"; moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')";
minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}"; minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}";
maximizeAction = "hyprctl dispatch fullscreen 1"; maximizeAction = "hyprctl dispatch fullscreen 1";
in in [
[ # Red close button
# Red close button # "${rgb config.colorscheme.colors.red},12,,${closeAction}"
# "${rgb config.colorscheme.colors.red},12,,${closeAction}" # # Yellow "minimize" (send to special workspace) button
# # Yellow "minimize" (send to special workspace) button # "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}"
# "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}" # # Green "maximize" (fullscreen) button
# # Green "maximize" (fullscreen) button # "${rgb config.colorscheme.colors.green},12,,${maximizeAction}"
# "${rgb config.colorscheme.colors.green},12,,${maximizeAction}" ];
];
}; };
# windowrulev2 = # windowrulev2 =
@@ -5,13 +5,12 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{
programs.hyprlock.enable = true; programs.hyprlock.enable = true;
programs.hyprlock.settings = { programs.hyprlock.settings = {
general = { general = {
+16 -15
View File
@@ -5,25 +5,26 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [libnotify];
home.packages = with pkgs; [ libnotify ];
services.mako = { services.mako = {
enable = true; enable = true;
defaultTimeout = 5000; # milliseconds, can be overwritten by notification sender settings = {
# backgroundColor = "#${palette.base00}"; TODO fix defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
# textColor = "#${palette.base05}"; backgroundColor = "#${palette.base00}";
# borderColor = "#${palette.base0D}"; textColor = "#${palette.base05}";
# progressColor = "over #${palette.base02}"; borderColor = "#${palette.base0D}";
# extraConfig = '' progressColor = "over #${palette.base02}";
# [urgency=high] extraConfig = ''
# border-color=#${palette.base09} [urgency=high]
# ''; border-color=#${palette.base09}
# '';
};
}; };
} }
+27 -31
View File
@@ -3,8 +3,7 @@
lib, lib,
config, config,
... ...
}: }: let
let
swaylock = "${config.programs.swaylock.package}/bin/swaylock"; swaylock = "${config.programs.swaylock.package}/bin/swaylock";
pgrep = "${pkgs.procps}/bin/pgrep"; pgrep = "${pkgs.procps}/bin/pgrep";
pactl = "${pkgs.pulseaudio}/bin/pactl"; pactl = "${pkgs.pulseaudio}/bin/pactl";
@@ -15,24 +14,21 @@ let
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min) 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. # Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
afterLockTimeout = afterLockTimeout = {
timeout,
command,
resumeCommand ? null,
}: [
{ {
timeout, timeout = lockTime + timeout;
command, inherit command resumeCommand;
resumeCommand ? null, }
}: {
[ command = "${isLocked} && ${command}";
{ inherit resumeCommand timeout;
timeout = lockTime + timeout; }
inherit command resumeCommand; ];
} in {
{
command = "${isLocked} && ${command}";
inherit resumeCommand timeout;
}
];
in
{
services.swayidle = { services.swayidle = {
enable = true; enable = true;
systemdTarget = "graphical-session.target"; systemdTarget = "graphical-session.target";
@@ -45,18 +41,18 @@ in
} }
] ]
++ ++
# Turn off displays (hyprland) # Turn off displays (hyprland)
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout { (lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
timeout = 300; timeout = 300;
command = "${hyprctl} dispatch dpms off"; command = "${hyprctl} dispatch dpms off";
resumeCommand = "${hyprctl} dispatch dpms on"; resumeCommand = "${hyprctl} dispatch dpms on";
})) }))
++ ++
# Turn off displays (sway) # Turn off displays (sway)
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout { (lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
timeout = 300; timeout = 300;
command = "${swaymsg} 'output * dpms off'"; command = "${swaymsg} 'output * dpms off'";
resumeCommand = "${swaymsg} 'output * dpms on'"; resumeCommand = "${swaymsg} 'output * dpms on'";
})); }));
}; };
} }
+2 -4
View File
@@ -2,11 +2,9 @@
config, config,
pkgs, pkgs,
... ...
}: }: let
let
inherit (config.colorscheme) colors; inherit (config.colorscheme) colors;
in in {
{
programs.swaylock = { programs.swaylock = {
enable = true; enable = true;
settings = { settings = {
@@ -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
@@ -12,7 +12,14 @@
"modules-center": [], "modules-center": [],
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"], "modules-right": ["idle_inhibitor", "custom/nixos-update", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
"custom/nixos-update": {
"exec": "frajul-auto-upgrade-status",
"return-type": "json",
"interval": 2,
"on-click-right": "frajul-auto-upgrade-toggle"
},
"hyprland/workspaces": { "hyprland/workspaces": {
"on-scroll-up": "hyprctl dispatch workspace m+1", "on-scroll-up": "hyprctl dispatch workspace m+1",
@@ -35,6 +42,7 @@
}, },
"idle_inhibitor": { "idle_inhibitor": {
"start-activated": true,
"format": "{icon}", "format": "{icon}",
"format-icons": { "format-icons": {
"activated": "", "activated": "",
@@ -5,14 +5,12 @@
lib, lib,
inputs, inputs,
... ...
}: }: let
let
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette; palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
in in {
{
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd.enable = true; # systemd.enable = true;
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json); settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
}; };
+4 -5
View File
@@ -3,9 +3,8 @@
lib, lib,
config, config,
... ...
}: }: {
{ home.packages = [pkgs.waypipe];
home.packages = [ pkgs.waypipe ];
systemd.user.services = { systemd.user.services = {
waypipe-client = { waypipe-client = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding"; Unit.Description = "Runs waypipe on startup to support SSH forwarding";
@@ -14,7 +13,7 @@
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/client.sock client"; 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"; ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/client.sock";
}; };
Install.WantedBy = [ "graphical-session.target" ]; Install.WantedBy = ["graphical-session.target"];
}; };
waypipe-server = { waypipe-server = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding"; Unit.Description = "Runs waypipe on startup to support SSH forwarding";
@@ -24,7 +23,7 @@
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"; 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"; ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/server.sock %t/wayland-waypipe";
}; };
Install.WantedBy = [ "default.target" ]; Install.WantedBy = ["default.target"];
}; };
}; };
} }
@@ -5,14 +5,13 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [wlogout];
home.packages = with pkgs; [ wlogout ];
# xdg.configFile."wlogout/style.css".text = '' # xdg.configFile."wlogout/style.css".text = ''
# * { # * {
@@ -5,14 +5,13 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [wofi];
home.packages = with pkgs; [ wofi ];
xdg.configFile."wofi/config".source = ./config; xdg.configFile."wofi/config".source = ./config;
xdg.configFile."wofi/style.css".text = '' xdg.configFile."wofi/style.css".text = ''
+2 -4
View File
@@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
inherit (config.colorscheme) colors; inherit (config.colorscheme) colors;
in in {
{
programs.zathura = { programs.zathura = {
enable = true; enable = true;
options = { options = {
+7 -6
View File
@@ -3,9 +3,8 @@
pkgs, pkgs,
config, config,
... ...
}: }: {
{ imports = [../rofi];
imports = [ ../rofi ];
services.dunst.enable = true; services.dunst.enable = true;
@@ -32,11 +31,13 @@
package = pkgs.i3-gaps; package = pkgs.i3-gaps;
}; };
xsession.importedVariables = [ ]; xsession.importedVariables = [];
# Overwrite default home-manager config file # Overwrite default home-manager config file
xdg.configFile."i3/config".source = lib.mkForce ( xdg.configFile."i3/config".source = lib.mkForce (
if config.hostName == "kardorf" then ./i3/config-kardorf else ./i3/config if config.hostName == "kardorf"
then ./i3/config-kardorf
else ./i3/config
); );
home.file = { home.file = {
@@ -48,5 +49,5 @@
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml; ".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
}; };
home.sessionPath = [ "/home/julian/.config/i3/scripts" ]; home.sessionPath = ["/home/julian/.config/i3/scripts"];
} }

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