135 Commits
Author SHA1 Message Date
Gitea Actions 91c5379c9b Update flake.lock 2025-04-28 2026-10-31 00:30:46 +00:00
Gitea Actions 3f685a78c3 Update flake.lock 2025-04-27 2026-10-31 00:30:46 +00:00
Gitea Actions 30992acc2c Update flake.lock 2025-04-26 2026-10-31 00:30:46 +00:00
Gitea Actions 2155d226ff Update flake.lock 2025-04-25 2026-10-31 00:30:46 +00:00
Gitea Actions 7701d8e8c8 Update flake.lock 2025-04-24 2026-10-31 00:30:46 +00:00
Gitea Actions 86be8033ce Update flake.lock 2025-04-23 2026-10-31 00:30:46 +00:00
Gitea Actions 52c7509bb7 Update flake.lock 2025-04-22 2026-10-31 00:30:46 +00:00
Gitea Actions 1786ba9062 Update flake.lock 2025-04-21 2026-10-31 00:30:46 +00:00
Gitea Actions eb7e5fd0cc Update flake.lock 2025-04-20 2026-10-31 00:30:46 +00:00
Gitea Actions af1c78bbe7 Update flake.lock 2025-04-19 2026-10-31 00:30:46 +00:00
Gitea Actions 56dfe3b692 Update flake.lock 2025-04-18 2026-10-31 00:30:46 +00:00
Gitea Actions a5974585e2 Update flake.lock 2025-04-17 2026-10-31 00:30:46 +00:00
Gitea Actions e0c73eb642 Update flake.lock 2025-04-16 2026-10-31 00:30:46 +00:00
Gitea Actions 0446de16a5 Update flake.lock 2025-04-15 2026-10-31 00:30:46 +00:00
Gitea Actions 8b67f93967 Update flake.lock 2025-04-14 2026-10-31 00:30:46 +00:00
Gitea Actions bb53edd27b Update flake.lock 2025-04-13 2026-10-31 00:30:46 +00:00
Gitea Actions 843fca49fe Update flake.lock 2025-04-12 2026-10-31 00:30:46 +00:00
Gitea Actions 1aac2a487c Update flake.lock 2025-04-11 2026-10-31 00:30:46 +00:00
Gitea Actions 3de7ac9f14 Update flake.lock 2025-04-10 2026-10-31 00:30:46 +00:00
Gitea Actions 45c06680ce Update flake.lock 2025-04-09 2026-10-31 00:30:46 +00:00
Gitea Actions a8f4ad0a86 Update flake.lock 2025-04-08 2026-10-31 00:30:46 +00:00
Gitea Actions 8e5fa83a3e Update flake.lock 2025-04-07 2026-10-31 00:30:46 +00:00
Gitea Actions 71627c9e11 Update flake.lock 2025-04-06 2026-10-31 00:30:46 +00:00
Gitea Actions f9698ba7d3 Update flake.lock 2025-04-05 2026-10-31 00:30:46 +00:00
Gitea Actions 95f4292270 Update flake.lock 2025-04-04 2026-10-31 00:30:46 +00:00
Gitea Actions 4ce34f6031 Update flake.lock 2025-04-03 2026-10-31 00:30:46 +00:00
Gitea Actions ead5e73282 Update flake.lock 2025-04-02 2026-10-31 00:30:46 +00:00
Gitea Actions 3c4d0bb61d Update flake.lock 2025-04-01 2026-10-31 00:30:46 +00:00
Gitea Actions 561854558f Update flake.lock 2025-03-31 2026-10-31 00:30:46 +00:00
Gitea Actions 134f9921e3 Update flake.lock 2025-03-30 2026-10-31 00:30:46 +00:00
Gitea Actions 429bfa6a81 Update flake.lock 2025-03-29 2026-10-31 00:30:46 +00:00
Gitea Actions 255ffad672 Update flake.lock 2025-03-28 2026-10-31 00:30:46 +00:00
Gitea Actions d5f0b24bbb Update flake.lock 2025-03-27 2026-10-31 00:30:46 +00:00
Gitea Actions bc63ba93ef Update flake.lock 2025-03-26 2026-10-31 00:30:46 +00:00
Gitea Actions d7727812ec Update flake.lock 2025-03-25 2026-10-31 00:30:46 +00:00
Gitea Actions d944de4611 Update flake.lock 2025-03-24 2026-10-31 00:30:46 +00:00
Gitea Actions 2aeb811bdb Update flake.lock 2025-03-23 2026-10-31 00:30:46 +00:00
julian d0dc9b12e5 fish: fix run and shell commands 2026-10-30 07:57:13 +01:00
julian f70623e865 desktop: change joplin to joplin-desktop 2026-10-30 07:42:34 +01:00
julian a49524da88 fish: augment run and shell with -u params (unstable) 2026-10-30 07:40:41 +01:00
julian d649aed4d6 kardorf: remove nameserver customization 2026-10-30 07:40:30 +01:00
julian 3807472d1e desktop: install joplin and libation 2026-10-30 07:40:20 +01:00
julian 1ed67f9cda hyprland: add shortcut to calibrate wacom tablet 2026-10-26 14:59:13 +01:00
julian 6ab04b11d9 update flake 2026-10-23 13:20:10 +02:00
julian 21069d519c update to noctalia 5 since it is stable now 2026-10-23 13:19:56 +02:00
julian 013d308de8 Fix element-desktop (electron) problem with hyprland 2026-10-23 13:06:00 +02:00
julian b238cfe3f4 fix inkscape and typst-languagetool long compile times 2026-10-06 17:07:29 +02:00
julian 8d912625f5 kardorf: setup hyprland for three monitors 2026-10-06 17:07:18 +02:00
julian 861fad71f1 update flake 2026-10-06 17:07:08 +02:00
julian b847179625 kardorf: use nvidia drivers for three monitor setup 2026-10-02 17:04:53 +02:00
julian e57d09e66b kardorf: install rpi-imager 2026-10-02 17:04:43 +02:00
julian c49fe8e2d9 Kardorf: remove disko config to reuse running ssd 2026-10-02 17:04:26 +02:00
julian 970bc466e3 kardorf: update hardware config 2026-10-01 15:33:34 +02:00
julian 949229f978 kardorf: use disko to prepare for hardware change 2026-10-01 15:13:24 +02:00
julian 14a06588b6 flake: update 2026-09-20 10:31:01 +02:00
julian da3e3d5f1b kardorf: add ausweisapp 2026-09-20 10:30:53 +02:00
julian 5e08f131c7 Merge branch 'master' of https://gitlab.julian-mutter.de/julian/configfiles 2026-09-19 06:46:28 +02:00
julian 544f47abd0 Kardorf: activate syncthing 2026-09-19 06:46:14 +02:00
julian af20072513 flake: update 2026-08-30 18:16:36 +02:00
julian 8759d71e1f aspi: add vortix 2026-08-30 18:16:29 +02:00
julian 3cc888b2a3 aspi: add ausweisapp 2026-08-30 18:16:13 +02:00
julian 6cce8363f7 desktop: add anki 2026-08-29 10:07:07 +02:00
julian 8340426ce2 Add japanese input method 2026-08-21 20:15:46 +02:00
julian 58b2d7fda9 atuin: configure accept on enter 2026-08-21 19:37:27 +02:00
julian af77c702db smath-studio: add meta and fix deprecation warning 2026-08-16 10:55:34 +02:00
julian 5b56cfbf94 smath: update 2026-08-16 10:24:54 +02:00
julian 015f47f36a smath: fix icon 2026-08-16 10:13:54 +02:00
julian b4824d3b71 update flake 2026-08-15 10:59:57 +02:00
julian d5b711f10a Install atuin with ai enabled 2026-08-15 10:59:47 +02:00
julian 4df37851d1 Install worktrunk 2026-08-15 10:59:39 +02:00
julian b6e2c6d0df Implement ssh keys protected with solokey 2026-08-15 10:59:22 +02:00
julian 121f79e048 flake: update 2026-07-19 14:48:40 +02:00
julian e85156235c builder: use correct ssh keys for age 2026-07-19 14:01:09 +02:00
julian e89908b592 builder: store nix-serve key in sops 2026-07-19 13:56:33 +02:00
julian 139402db48 readme: change builder install to remote flake 2026-07-19 13:21:01 +02:00
julian 0bbce5c85e builder: enable gitea-runner 2026-07-19 13:20:42 +02:00
julian 3fd5c34aa1 builder: change ssh key for sops 2026-07-19 13:18:47 +02:00
julian a7df51dbb8 readme: document nixos-anywhere install for builder 2026-07-19 12:59:59 +02:00
julian d89b8b51cc builder: fix config for installation 2026-07-19 12:59:50 +02:00
julian 6c301d87fd builder: allow using modules 2026-07-19 12:53:01 +02:00
julian 4b6c84e63d fix modules not detected 2026-07-19 12:50:16 +02:00
julian 59780f39d0 kardorf: do not use builder 2026-07-19 12:32:11 +02:00
julian 48d784a964 builder: massive config cleanup, breakdown into modules, use disko 2026-07-19 12:29:39 +02:00
julian 76ad137946 hyprland: make monitor config dependent on config.monitors 2026-07-19 09:08:50 +02:00
julian de081fe38f kardorf: use k9s 2026-07-18 15:05:01 +02:00
julian 940ea05b3f fix noctalia if kde is installed alongside 2026-07-18 15:04:28 +02:00
julian 107e86d533 update flake 2026-07-18 15:04:19 +02:00
julian db11705c44 noctalia: update to v4.7.7 to fix hyprland issues 2026-07-03 17:56:22 +02:00
julian 6dca04621d noctalia: go back to v4 2026-07-01 21:28:54 +02:00
julian 00ef9ef193 noctalia: update config 2026-07-01 21:16:31 +02:00
julian d923423d52 locale: fix 2026-07-01 21:14:29 +02:00
julian 9595f16689 noctalia: update config 2026-07-01 21:08:16 +02:00
julian 77c9c87624 change time locale 2026-07-01 21:06:29 +02:00
julian a5ebf46d0c update flake 2026-07-01 20:54:00 +02:00
julian 1bd857c1ca Noctalia: migrate to v5 2026-07-01 20:53:52 +02:00
julian de10839976 noctalia: use cached flake input 2026-07-01 20:01:12 +02:00
julian ae2995e972 caches: prioritize cache.nixos.org 2026-07-01 19:57:25 +02:00
julian f494e364e1 hm: remove unavailable gtk4 config value 2026-06-25 20:07:50 +02:00
julian 39cac2aedb noctalia: use new config parameter name 2026-06-25 20:07:30 +02:00
julian 3260c774ca nixvim: fix warning at build 2026-06-25 20:07:12 +02:00
julian daf0980eb9 update flake 2026-06-25 20:07:06 +02:00
julian c61f1f6741 aspi: disable builder 2026-06-21 12:10:45 +02:00
julian 99cc802565 aspi: enable bluetooth 2026-06-18 20:55:16 +02:00
julian 4bc97efe7a aspi: add k9s config 2026-06-18 20:52:23 +02:00
julian 6260c56bbd Builder: add docker and devenv to gitea ci packets 2026-06-12 14:42:11 +02:00
julian 0b5d298bc4 Noctalia, improve bar with only one window 2026-06-08 17:02:36 +02:00
julian f7ae712471 hyprland: disable resize on border 2026-06-08 16:51:45 +02:00
julian 5601b1339c Noctalia: disable notifications 2026-06-04 18:40:49 +02:00
julian 2b30fc1a4d Builder: update runner, improving available options 2026-06-04 17:18:32 +02:00
julian cd0e4479f7 Configure cursor for hyprland 2026-06-04 09:15:21 +02:00
julian 8ed9ed7b51 Fix noctalia config interfering with stylix 2026-06-04 09:14:54 +02:00
julian 42be5edaf1 Reformat hyprland lua config 2026-06-04 09:14:29 +02:00
julian 3040914409 Use noctalias night light 2026-06-04 08:40:46 +02:00
julian c623efd959 Remove unused hyprland package config 2026-06-04 08:39:06 +02:00
julian 002106286a Remove unused zathura 2026-06-04 08:38:56 +02:00
julian 0439a3a70c Disable plasma to make noctalia work 2026-06-04 08:36:11 +02:00
julian d7fd96b4ae Setup noctalia 2026-06-04 08:36:04 +02:00
julian 1cc47bea5c hyprland: remove default animations 2026-06-03 19:12:31 +02:00
julian 2ddb17e9dd hyprland: improve dwindle settings 2026-06-03 19:04:11 +02:00
julian 9de557705a Migrate hyprland config to the new lua version 2026-06-03 18:54:19 +02:00
julian 27f2604ed4 Remove unused lines 2026-06-03 16:17:46 +02:00
julian c51feeac8a Move stylix not nixos 2026-06-03 16:17:46 +02:00
julian 27154a2ad8 Reset waybar to manual style config 2026-06-03 16:17:46 +02:00
julian fc05eb7824 Pin stylix to stable release 2026-06-03 16:17:46 +02:00
julian dab57c7754 Ghostty fix theme 2026-06-03 16:17:46 +02:00
julian 2907927036 Fix hyprland config 2026-06-03 16:17:46 +02:00
julian 3945bc3204 Fix standalone v3ms config, adding stylix 2026-06-03 14:44:21 +02:00
julian f7a84f0531 Update flake 2026-06-02 22:40:47 +02:00
julian 327ceed460 Install mise 2026-06-02 21:51:39 +02:00
julian 0c1df548a2 Do not use binarycache anymore 2026-06-02 21:51:39 +02:00
julian 948ac61d8b Fix deprecation warnings 2026-06-01 23:35:03 +02:00
julian c0d6d4483d Migrate more config to stylix 2026-06-01 23:14:06 +02:00
julian f6c123e3bf Use stylix instead of unmaintained nix-colors 2026-06-01 23:06:54 +02:00
julian 5ecb1594d1 Upgrade to nixos 26.04 2026-06-01 22:27:35 +02:00
julian 8ce210ad1f Install more fonts by default 2026-05-17 15:51:34 +02:00
59 changed files with 2680 additions and 1215 deletions
+8 -1
View File
@@ -1,7 +1,7 @@
keys: keys:
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg - &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4 - &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja - &builder-ssh age1vwanu6jm80jzwe78jzz7z9vuzlg94tl7rpdg34vjmxcrnhddxu9q5zaf49
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5 - &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
creation_rules: creation_rules:
@@ -17,3 +17,10 @@ creation_rules:
- age: - age:
- *primary - *primary
- *builder-ssh - *builder-ssh
- path_regex: features-nixos/optional/k9s/kubeconfig.secret.yaml$
key_groups:
- age:
- *primary
- *aspi-ssh
- *kardorf-ssh
+8
View File
@@ -36,3 +36,11 @@ ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
#+begin_src sh #+begin_src sh
sops updatekeys secrets/* sops updatekeys secrets/*
#+end_src #+end_src
* Installation of builder
- Start recent nixos installer in VM
- Set password for root
#+begin_src sh
nix run github:nix-community/nixos-anywhere -- --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#builder --target-host root@<ip>
#+end_src
+1
View File
@@ -13,6 +13,7 @@
./nix.nix ./nix.nix
./sops.nix ./sops.nix
./root.nix ./root.nix
./stylix.nix
] ]
++ [ ++ [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
+16 -2
View File
@@ -1,4 +1,4 @@
{ {pkgs, ...}: {
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
@@ -11,7 +11,7 @@
LC_NUMERIC = "en_US.UTF-8"; LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "de_DE.UTF-8"; LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8"; LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8"; LC_TIME = "en_GB.UTF-8"; # english weekdays, but 24h format
}; };
# Keymap # Keymap
@@ -23,4 +23,18 @@
console.keyMap = "de"; console.keyMap = "de";
time.timeZone = "Europe/Berlin"; time.timeZone = "Europe/Berlin";
## Japanese input, env vars and servic start are configured in hyprland config
## Configure via program fcitx5-configuration
## There, add the mozc input for japanese
## This could also be done declaratively in this config, see: https://wiki.nixos.org/wiki/Fcitx5
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk # Ensures IME works in GTK applications
];
fcitx5.waylandFrontend = true; # compability with wayland
};
} }
-1
View File
@@ -1,7 +1,6 @@
{outputs, ...}: { {outputs, ...}: {
# Apply overlays # Apply overlays
nixpkgs = { nixpkgs = {
# 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; nvidia.acceptLicense = true;
+34
View File
@@ -0,0 +1,34 @@
{
pkgs,
inputs,
...
}:
{
imports = [ inputs.stylix.nixosModules.stylix ];
stylix.enable = true;
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
stylix.targets.gtksourceview.enable = false; # otherwise inkspace is recompiled every time
stylix.fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
monospace = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans Mono";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji";
};
};
}
+7 -3
View File
@@ -6,18 +6,22 @@
# Setup binary caches # Setup binary caches
nix.settings = { nix.settings = {
substituters = [ substituters = [
# high priority since it's almost always used
"https://cache.nixos.org?priority=10"
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org" "https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de" # "http://binarycache.julian-mutter.de"
"https://devenv.cachix.org" "https://devenv.cachix.org"
"https://noctalia.cachix.org"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E=" "binarycache.julian-mutter.de:7RB4Sif4WQU76XWIsRJ2KtKa45zg1QOTHEkUhi/JBe8="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4="
]; ];
trusted-users = [ trusted-users = [
+1 -22
View File
@@ -1,7 +1,4 @@
{config, ...}: let {
homeCfgs = config.home-manager.users;
julianCfg = homeCfgs.julian;
in {
users.extraUsers.greeter = { users.extraUsers.greeter = {
# For caching # For caching
home = "/tmp/greeter-home"; home = "/tmp/greeter-home";
@@ -10,28 +7,10 @@ in {
programs.regreet = { programs.regreet = {
enable = true; enable = true;
iconTheme = julianCfg.gtk.iconTheme;
theme = julianCfg.gtk.theme;
# font = julianCfg.fontProfiles.regular; # TODO: do
cursorTheme = {
inherit (julianCfg.gtk.cursorTheme) name package;
};
cageArgs = [ cageArgs = [
"-s" "-s"
"-m" "-m"
"last" "last"
]; # multimonitor use last monitor ]; # 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";
# };
# };
}; };
} }
+49
View File
@@ -0,0 +1,49 @@
# Host hydra
{...}: {
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
};
# 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;"
# ;
};
};
};
}
+52
View File
@@ -0,0 +1,52 @@
# Setup the device as a jenkins agent
{pkgs, ...}: {
services.openssh = {
enable = true;
# require public key authentication for better security
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
settings.PermitRootLogin = "yes";
# Add older algorithms for jenkins ssh-agents-plugin to be compatible
settings.Macs = [
"hmac-sha2-512-etm@openssh.com"
"hmac-sha2-256-etm@openssh.com"
"umac-128-etm@openssh.com"
"hmac-sha2-512"
"hmac-sha2-256"
"umac-128@openssh.com"
];
settings.KexAlgorithms = [
"diffie-hellman-group-exchange-sha1"
"diffie-hellman-group14-sha1"
"mlkem768x25519-sha256"
"sntrup761x25519-sha512"
"sntrup761x25519-sha512@openssh.com"
"curve25519-sha256"
"curve25519-sha256@libssh.org"
"diffie-hellman-group-exchange-sha256"
];
};
users.users.jenkins = {
createHome = true;
home = "/var/lib/jenkins";
group = "jenkins";
isNormalUser = true;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ36sQhVz3kUEi8754G7r3rboihhG4iqFK/UvQm6SING jenkins@home"
];
packages = with pkgs; [
git
devenv
];
extraGroups = [
"docker"
];
};
users.groups.jenkins = {};
programs.java = {
enable = true;
package = pkgs.jdk21; # Same as jenkins version on home
};
}
+18
View File
@@ -0,0 +1,18 @@
{
config,
pkgs,
...
}: {
environment.systemPackages = with pkgs; [
kubectl
k9s
];
sops.secrets.kubeconfig = {
sopsFile = ./kubeconfig.secret.yaml;
format = "binary";
owner = config.users.users.julian.name;
group = config.users.users.julian.group;
};
environment.variables.KUBECONFIG = config.sops.secrets."kubeconfig".path;
}
@@ -0,0 +1,22 @@
{
"data": "ENC[AES256_GCM,data:nq2czkXqOhjRECF9kASPiBCiz1I7LQLljTV+LkrBp4+BH92YTV6ywRyerNoTDmaBmnY+fuhdnPkN7Q9jjT1SNGLIxBG4b6gOpzgr3amhfNAW3MAUUcPuqNsk0EZ4ZJiUluPCvRtAKHyXsrQpN8P04Rg0OjHoxCrOgKjmODr14QNiQH4RAONSai76dRgRBMQs0PIzcAiMSkwKc0OgBYTccSspV7DlulA3ngv0LuUavKS6QoJ4DuCnFgOu5KHGLQS0ww+Ijp1wAx/4/tq8Iimdn968uvzFjrZATb3bHVjHSR/cbNRCJn6GrpqFCNdpI5OPw3P9f9rodXZKai/bESu2aC8Dlya2by29lCPHkg5lp6atZA8ksnj9brYsFUb6xKPUAPGDElBaUEf+LidsZlI6hAz98/uf3bwyqq22+gMkfKUM1pX1YOtyTq+5eMSn0kBuSVupvEDJaO/G/YlTUDvJL0CzwO0hLzzotLrGcqhvYqjHCr2XhIER+YgYA7D22iml5YOLRxp5RQd3sj74hUGWJkGq1p/uhniaOvrjF0zmQsqHFC4+jUNBKVMVVTLBX/AdL45Lv+HDM4jYCvtNIKAGtTGT71cplhBI2xP1s607NiIbUsSY+2qayh3INOP7qGWwpYquYe/xAk6KZMu1/UuvneVqOjqlcJFOpLqydPnP0oQRy1dtCcJsvT5nv0QEI+Tr24Dbn3tX8fmc8EzZwpmEyHto7nYzHFicgvmYavmTHkmbzySDMI03ktZ7EdM0unlNe9EmR8YyGeg7tmG4bKx9K+7qs0Piqq03gHwN9L92O80J8jiKu8MDURWywYPYHUmCKYbkHh5en1qvyFTU7dDI7L+gdp9+VSqJrkQqPbWAouMBlLE0664lTpzmYQOXWo8riwjYPllkd8EqCaKxrMMHp4Y46X69lsZS1mImuHac3xJV57r6A+mMJajGW92KI13416rwG9sXS1ynNdBTi9+P/1f3Sy8B6ypYa1BP/6+tHqghNAuz5aaKZJnsCWYMAk6y5AuFaZ2ZkO1ruSfdPmyjKoMcp/qO5nmHxF+0h+teSuvLeCb7KrL80IlKElgDINlPYHDVtaoYVv4sZAWhSNJSOUWRbue3bJaqhKz3xOdq5lJy7H3P+MQF8YFgoY7Po4EcXqTP8Upm3tIehPr7BJXNIv6beDPwpMZrvVKqVIgsXD85DqyA1Mh7k5gQpB4uAhZfRUQ8T4reVumjOnGakXh+1DcFPYJumScCP1/68btIYGYJiPJTJhL7/U+12siGzzXXZeaJ7NpCzpvpgmFvoMfV+gFgrAUkb2+eSeEI6BNRjfXWc5NM03RQqotqW4E3Ui+gYbwU0D9/8b5UsRc4IiujnZFSKbCZGGHm79Yrm8IhtTuVyQV67/NeuRfIcJuPPmYGS8nnX8v7pymlagm/43sFHpupsrgeVStsLl1asKJanA6Njus/YA3zrdmgKb1kMK6ALBc73WaT9S+4aZeKB8A6jA5PD2GAgW/T5jaHxi0VPisg0eChKtJfhJVFoZFE+U2fx2YrTeC/joSdS4jqTKaqwDgJ19d5Wvs8ZDQDjHo5I8uUArWODTW/H8An9zp8jsEN6bS1mBeta8qhkz2v9diBUFwmDvmGNX5REirrm3bkqWF2xx6NEiDARTUVAf+fh9VQaQQKK2sQ35zjaAbI4aXmDTI9vy8aFs+6MvJ/iiIwKkjVgZYmyiUVtHy6ZRGwdzgpuOAcoYRxGHaDYIEL33nDQclLmgUwWAfbc0bTI1rvaIzZ25nZ6n4aFFtpANJHTtYeMrAAl1Sho0dio6clM7/k4XST5GA4BqDlRs/Oze4yNjjQb5WoYrBCFEuVcypvRBmLEbM3XOK1sHdQAEAqey/ZfhfNhAVeapVw3ir4E2jsX9pAqlTjH4YkrIURhG05yPb2D3+WMKGAoC4yyusd7siz6tJ4uXvFXkTeOjXMM/Xo/dBnm2J1FPHr9msELIxhtG046/m+I/MEaF6Hg9XC2CZrlxi5OsH61PGBOLLNVFiQ8NaPChHRppQEH1y1GSN+5FinxTK0R5GS3PxN15NZXjmMsj+ixYmbWjkJJXn2bDM7Muv7PRetpcMhU0UIr75+6MWbwPy6v62IsDoQCOslnQVbGc/oHY47EoZ7lKbuulP0ZvQOQxGNvcOtbVc0dJHdFUTgrPxpkCyOQ4NGSLSah1qzDP5j4Fq4ag+OdITPQpDdX6TkiufGfFqq7C5GNHDK8olYKGwH3D0GCGT8o9pFx+FIeRapaWJHkcPibDMyu3KumRy04HF1ih2Z6IoWFHa532pgsK9FlAMGHeqtL/LXWZKtLONR6wNU8DxfbIhV+lUlvbbs27VMj0VHXMXdYnbvGvXOPkb4iP4Pm+HQU4AF3ROA7rtWtrL401Qpdbln5qLEWz9hKCXbM1MbvpGvNvHKckKAWpKmCsVWY8oPCNOqqWAZF5sfrlLb4fULOXg0YQCeobo3O9DZjPf/D/ki6OX5KEgYlqikKdd9hR1d5koyt0bunuFHty2guh8oaUsPjJbcuSCLz80HND9j12msuG13qFWvf77rUiE3WZ5aTSGWh7VB/lUofuEn+aTaGBK7iLAj2PU+/YQUmEFAWaIXOdq7fumHgVdsBRThXvqf7RHD+ZkpMq3D0wsnCwIgCGvxH76ah1wZzPm0lg/tecL294e8ICDuQw+pyOVj96vMdiNF31ADd1BZCO505Y7jsEFdJCJvCGXNNvTr+ir4Vh9RdwBOXxxpX9DcQaaruVQ9nCty/ikBJ04Qok6ZVV8XXbN+HNu8iGVpLNrj1E1rRAJmeqfKiDuiG6ABqLDtq9beMS9K2xhKvwjG/z+AD3v6djipkdYjjlDOV6WNxWWv74LlzjSC9Se9ERATZfCj5U06LHO1yg8y+uIvRyoWIEaAFG7aFrEvfDH6OfzbhutGDMoxBThzKhxPDq9pm/N4cBcoRwGKgrlYmjLIl5Full/ArbLN1C6EXABn9Bu6lL7VrhwSj+HC0sp1vJb3ECmvtD7lzZsqejf4p6P/FPKLHUBNVr6sTJ9fHtOaYFi7DxQONqM/yoPBLB/TeZnB0KFFfKkCNM7YDOZjQ/UZscOZxztcYc7TeQ8dA0ZUfto=,iv:ZgZWZAQZmYUs0EqZuoTCTWQ52CnuSTS+zdIuIA1UNOM=,tag:vbI3RDpvU+X1xQo+lT7WbA==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMVNBZDd4VndET2pMVjVr\nNkw4aW9HckJXYU0yREoyZ09oZ3JKSVlsQ3c4CkFRWURVN2tmOXNTZHhOdS91QW5a\nRlhhSDI3c2dHVVlTLzB3NjA4c1J2UncKLS0tIHFaL21rRWNpeGlqd0pIaXU5WFRP\neTZSOHpBTTE3ZjFIbXRuSnJjdlEwSXcKqWIxCnWJvE058ojm2RrwzXkTWQLZbE7L\nXPisgwudwY+vFaTziubbPp/U9P3LXs3oFhPSqgiuCkDNLETFkpw1ng==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHZHc0TzJKNzBUSG9GajVr\nazFWSS96Z3VXdDZOM2hPdVB4QTRhOEtVNDNRCmJkWm1TUGRwb0hpS1BBWm5WcURx\nQ21idzVZZzR5U0o3eDM1NmwySFpGQzAKLS0tIG51ZndsSDI1N2M4b280SW53eEF0\nMStNSU9odzRhY05SL05RYWlpaUlFQUkKoxVqeqZ9xAR4+JMcJXdEq0cq2CkZz63/\nSjwNDdCHjePc62yj5Qyw15zLrL2t7jvLUG44kPUbDuOIVwMH2KV2hQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4"
},
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYd1ZJTUtLbzY4d1hSRDA1\ndHdRQnhhUHVFMDJVOUQ0VFZCeW40S0lFODBJCmFvRSsyRkI3MDFGeDdkeGRSTVh5\nTEdwQTBWVVlwSjZHWXpoN0xzb0tuR1kKLS0tIEpvVU0rVTRWQUxLNW9zMFo3cVBr\ncGYxemF6MHlBS1dqSXM3aXRTZmdHQWMKjEcJJXRKCber6afB11j1VmWM3dObm45u\nkZ+E3bK1zd/L6YoLr1jF7GP9b62GjTG9Qv1M/JdKM4qlY//GmW6IIQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5"
}
],
"lastmodified": "2026-06-18T18:37:59Z",
"mac": "ENC[AES256_GCM,data:UXFXrUrbmyp+MnBNDKKr4FP0WFhWH97W68KXlE/UzEvBVpeHste92UPzdX4FMk2rEd7ldsMcTV9hmRavWI5v/Y/y/hzuhdCkqsYfnixS15Z9PrfuFX6YjrpeoJ84s1itmhjimKe4mmXt/aND8DLJ49rQ/A1hebJ2UndBlsRIGmc=,iv:YJPVWuajQ0tzhuoIBcWw8Wy5IBy+HC0JcR69gelGzGM=,tag:YW0STCsswNaqjKBta1OwyQ==,type:str]",
"version": "3.13.1"
}
}
+1 -1
View File
@@ -15,7 +15,7 @@ in {
# TODO: what does this do # 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;
}; };
+7
View File
@@ -0,0 +1,7 @@
# config to make solokey1 work for ssh
{...}: {
# services.pcscd.enable = true;
services.gnome.gcr-ssh-agent.enable = false;
programs.ssh.startAgent = true;
}
Generated
+986 -136
View File
File diff suppressed because it is too large Load Diff
+19 -5
View File
@@ -3,20 +3,35 @@
inputs = { inputs = {
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
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";
deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.url = "github:serokell/deploy-rs";
# For latest noctalia version
noctalia = {
url = "github:noctalia-dev/noctalia/cachix";
# inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:nix-community/stylix/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-generators = { nixos-generators = {
url = "github:nix-community/nixos-generators"; url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
vortix = {
url = "github:Harry-kp/vortix";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-25.11"; url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-index-database = { nix-index-database = {
@@ -42,8 +57,7 @@
flake = false; flake = false;
}; };
nixvim = { nixvim = {
url = "github:nix-community/nixvim/nixos-25.11"; url = "github:nix-community/nixvim/nixos-26.05";
inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-matlab = { nix-matlab = {
url = "gitlab:doronbehar/nix-matlab"; url = "gitlab:doronbehar/nix-matlab";
+2 -2
View File
@@ -41,7 +41,7 @@ in {
sqlite sqlite
# Code formatters for use with doom emacs # Code formatters for use with doom emacs
nixfmt-rfc-style # nix nixfmt # nix
alejandra # nix alejandra # nix
nixd # nix lsp nixd # nix lsp
@@ -67,7 +67,7 @@ in {
# neocmakelsp # cmake # neocmakelsp # cmake
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
frajul.typst-languagetool # frajul.typst-languagetool
ltex-ls-plus ltex-ls-plus
(texlive.combine { (texlive.combine {
+44 -6
View File
@@ -5,7 +5,7 @@
}: }:
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;
}; };
@@ -32,6 +32,30 @@ with lib; {
enableFishIntegration = true; enableFishIntegration = true;
}; };
programs.atuin = {
enable = true;
enableFishIntegration = true;
daemon.enable = true;
settings = {
auto_sync = false;
enter_accept = true; # execute directly on enter
ai = {
enabled = true;
capabilites = {
enable_file_tools = false;
enable_command_execution = false;
enable_history_output = false;
enable_history_search = true;
};
opening = {
# The context sent to the ai
send_cwd = false;
send_last_command = false;
};
};
};
};
programs.fish = { programs.fish = {
enable = true; enable = true;
@@ -43,14 +67,28 @@ with lib; {
cd $argv cd $argv
''; '';
run = '' run = ''
nix run --impure nixpkgs#"$argv[1]" -- $argv[2..-1] set -l channel nixpkgs
if test "$argv[1]" = -u; or test "$argv[1]" = --unstable
set channel github:NixOS/nixpkgs/nixpkgs-unstable
set -e argv[1]
end
nix run --impure $channel#"$argv[1]" -- $argv[2..-1]
''; '';
shell = '' shell = ''
set args set -l channel nixpkgs
for arg in $argv
set args $args nixpkgs#$arg if test "$argv[1]" = -u; or test "$argv[1]" = --unstable
set channel github:NixOS/nixpkgs/nixpkgs-unstable
set -e argv[1]
end end
nix shell --impure $args
set -l packages
for arg in $argv
set -a packages $channel#$arg
end
nix shell --impure $packages
''; '';
fish_user_key_bindings = '' fish_user_key_bindings = ''
bind ctrl-space 'zi; commandline -f repaint' bind ctrl-space 'zi; commandline -f repaint'
+4
View File
@@ -7,6 +7,8 @@ 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
nerd-fonts.jetbrains-mono
font-awesome font-awesome
dejavu_fonts dejavu_fonts
noto-fonts noto-fonts
@@ -16,5 +18,7 @@ with lib; {
fira-code fira-code
fira-code-symbols fira-code-symbols
source-code-pro source-code-pro
source-sans
roboto
]; ];
} }
+1 -1
View File
@@ -7,7 +7,7 @@
enable = true; enable = true;
enableFishIntegration = true; enableFishIntegration = true;
settings = { settings = {
theme = "catppuccin-mocha"; # theme = "catppuccin-mocha";
font-size = 12; font-size = 12;
}; };
}; };
-33
View File
@@ -1,33 +0,0 @@
{
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];
}
+67 -374
View File
@@ -4,27 +4,22 @@
config, config,
lib, lib,
... ...
}: let }: {
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
imports = [ imports = [
# inputs.hyprland.homeManagerModules.default # inputs.hyprland.homeManagerModules.default
./waybar # ./waybar
./wofi # ./wofi
./mako # ./mako
# ./hyprlock # ./hyprlock
./wlogout ./wlogout
../gammastep # ../gammastep
./swayidle.nix # ./swayidle.nix
./swaylock.nix ./swaylock.nix
./zathura.nix
./waypipe.nix ./waypipe.nix
# ./hyprbars.nix # ./hyprbars.nix
inputs.noctalia.homeModules.default # Use for latest version from inputs
]; ];
xdg.portal = { xdg.portal = {
@@ -37,19 +32,39 @@ in {
}; };
}; };
programs.imv.enable = true; # TODO: what is that home.pointerCursor = {
hyprcursor.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
# noctalia-shell ipc call state all | jq .settings | xclip
# xdg.configFile."noctalia/settings.json".source = ./noctalia.json;
programs.noctalia = {
enable = true;
# noctalia config export full > noctalia.toml
settings = ./noctalia.toml;
};
home.packages = with pkgs; [ home.packages = with pkgs; [
hyprpicker hyprpicker
hyprcursor
brightnessctl brightnessctl
playerctl
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" ( (pkgs.writeShellScriptBin "toggle-screen-mirroring"
builtins.readFile ./toggle-screen-mirroring.sh (
builtins.replaceStrings
["@INTERNAL_MONITOR@" "@EXTERNAL_MONITOR@"]
[(builtins.elemAt config.monitors 0).name (builtins.elemAt config.monitors 1).name]
(builtins.readFile ./toggle-screen-mirroring.sh)
)) ))
(pkgs.writeShellScriptBin "correct-workspace-locations" ( (pkgs.writeShellScriptBin "correct-workspace-locations" (
@@ -57,7 +72,7 @@ in {
builtins.concatLists ( builtins.concatLists (
map ( map (
monitor: monitor:
map (ws: "hyprctl dispatch moveworkspacetomonitor ${ws} ${monitor.name}") monitor.workspaces map (ws: "hyprctl dispatch 'hl.dsp.workspace.move({workspace=\"${ws}\", monitor=\"${monitor.name}\"})'") monitor.workspaces
) )
config.monitors config.monitors
) )
@@ -73,51 +88,48 @@ in {
MOZ_ENABLE_WAYLAND = 1; MOZ_ENABLE_WAYLAND = 1;
QT_QPA_PLATFORM = "wayland"; QT_QPA_PLATFORM = "wayland";
LIBSEAT_BACKEND = "logind"; LIBSEAT_BACKEND = "logind";
NIXOS_OZONE_WL = 1;
}; };
# 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; services.network-manager-applet.enable = true;
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
# Whether to enable Hyprland wayland compositor
enable = true; enable = true;
# package = config.lib.nixGL.wrap (
# pkgs.hyprland.override { configType = "lua";
# # nixgl needed? extraConfig =
# wrapRuntimeDeps = false; # Variables controllable by nix
# } ''
# ); -- Nix controlled variables
local terminal = "${config.terminal}"
local fileManager = "pcmanfm"
-- local menu = "wofi --show drun,run"
local menu = "noctalia msg panel-toggle launcher"
local calculator = "qalculate-gtk"
local browser = "firefox"
local editor = "emacs"
''
+ "-- Main config from `hyprland.lua`\n"
+ builtins.readFile ./hyprland.lua
+ "-- Monitor config\n"
+ lib.concatStringsSep "\n" (
map (
monitor: "hl.monitor({ output = \"${monitor.name}\", mode = \"${toString monitor.width}x${toString monitor.height}@${toString monitor.refreshRate}\", position = \"${monitor.position}\", scale = \"auto\", mirror = \"\"})"
)
config.monitors
)
+ "\n-- For plugging in random monitors\n"
+ "hl.monitor({ output = \"\", mode = \"preferred\", position = \"auto\", scale = \"auto\", mirror = \"\"})\n"
+ "-- Assign workspaces to monitors\n"
+ lib.concatStringsSep "\n" (
builtins.concatLists (
map (
monitor:
map (ws: "hl.workspace_rule({ workspace = \"${ws}\", monitor = \"${monitor.name}\"})") monitor.workspaces
)
config.monitors
)
);
systemd = { systemd = {
enable = true; enable = true;
@@ -134,329 +146,10 @@ in {
]; ];
}; };
# 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; 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 = [ plugins = [
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
# 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 = {
"$mod" = "SUPER";
# Environment variables programs like emacs have access to
env = "TERMINAL,${config.terminal}";
# Monitors
monitor = ",preferred,auto,1";
# Autostart
exec-once = [
(lib.getExe pkgs.firefox)
(lib.getExe pkgs.waybar)
];
# 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
};
cursor = {
no_hardware_cursors = 1; # disable hardware cursors to fix tearing on kardorf
};
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 8, class:Zotero"
"workspace 9, class:nheko"
"workspace 9, class:Element"
"workspace 9, class:discord"
"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, R, submap, resize"
"$mod, O, submap, open"
#
"$mod, SPACE, focuswindow, floating"
"$mod SHIFT, SPACE, togglefloating,"
"$mod, F, fullscreen,"
"$mod, X, killactive,"
"$mod, -, 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" ];
# };
# };
};
}; };
} }
+318
View File
@@ -0,0 +1,318 @@
-------------------
---- AUTOSTART ----
-------------------
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
hl.on("hyprland.start", function()
-- hl.exec_cmd("waybar")
hl.exec_cmd("env QT_QPA_PLATFORMTHEME=qt5ct noctalia") -- env ensures noctalia works alongside kde
hl.exec_cmd("firefox")
hl.exec_cmd("fcitx5 -d -r")
end)
hl.on("config.reloaded", function()
hl.exec_cmd("correct-workspace-locations")
end)
-------------------------------
---- ENVIRONMENT VARIABLES ----
-------------------------------
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
hl.env("TERMINAL", terminal) -- e.g. for emacs
-- Use fcitx for optional japanese input
hl.env("XMODIFIERS", "@im=fcitx")
hl.env("QT_IM_MODULE", "fcitx")
hl.env("SDL_IM_MODULE", "fcitx")
-----------------------
----- PERMISSIONS -----
-----------------------
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
-- for security reasons
-- hl.config({
-- ecosystem = {
-- enforce_permissions = true,
-- },
-- })
-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
-----------------------
---- LOOK AND FEEL ----
-----------------------
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
hl.config({
general = {
gaps_in = 5,
gaps_out = 5,
border_size = 2,
-- Set to true to enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false,
-- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
allow_tearing = false,
layout = "dwindle",
},
decoration = {
-- power saving
shadow = {
enabled = false,
},
-- power saving
blur = {
enabled = false,
},
},
animations = {
enabled = false,
},
misc = {
disable_autoreload = true,
},
cursor = {
no_hardware_cursors = 1, -- disable hardware cursors to fix tearing on kardorf
},
render = {
direct_scanout = 1,
},
})
-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
-- "Smart gaps" / "No gaps when only"
hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
hl.config({
dwindle = {
preserve_split = false,
smart_split = false,
smart_resizing = true,
force_split = 2,
},
})
----------------
---- MISC ----
----------------
hl.config({
misc = {
disable_hyprland_logo = true, -- If true disables the random hyprland logo / anime girl background. :(
},
})
---------------
---- INPUT ----
---------------
hl.config({
input = {
kb_layout = "de",
follow_mouse = 1,
touchpad = {
natural_scroll = false,
},
},
})
---------------------
---- KEYBINDINGS ----
---------------------
local mainMod = "SUPER"
-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd(terminal))
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd(browser))
hl.bind(mainMod .. " + C", hl.dsp.exec_cmd(calculator))
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd(editor))
hl.bind(mainMod .. " + X", hl.dsp.window.close())
hl.bind(mainMod .. " + SHIFT + E", hl.dsp.exec_cmd("wlogout -p layer-shell"))
hl.bind(mainMod .. " + ESCAPE", hl.dsp.exec_cmd("wlogout -p layer-shell"))
hl.bind(mainMod .. " + SHIFT + R", hl.dsp.exec_cmd("hyprctl reload"))
hl.bind(mainMod .. " + PRINT", hl.dsp.exec_cmd("hyprshot-gui"))
hl.bind("PRINT", hl.dsp.exec_cmd("hyprshot-gui"))
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("toggle-screen-mirroring; correct-workspace-locations"))
hl.bind(mainMod .. " + SHIFT + P", function()
hl.device({
name = "wacom-one-by-wacom-m-pen",
output = hl.get_active_monitor().name
})
end)
-- hyprctl eval 'hl.device({ name = "wacom-one-by-wacom-m-pen", output = hl.get_active_monitor().name })'
hl.bind(mainMod .. " + TAB", hl.dsp.exec_cmd("swaylock --daemonize"))
hl.bind(mainMod .. " + W", hl.dsp.exec_cmd("makoctl dismiss"))
hl.bind(mainMod .. " + SHIFT + W", hl.dsp.exec_cmd("makoctl restore"))
hl.bind(mainMod .. " + R", hl.dsp.submap("resize"))
hl.bind(mainMod .. " + O", hl.dsp.submap("open"))
-- hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
-- hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
hl.bind(mainMod .. " + SHIFT + SPACE", hl.dsp.window.float({ action = "toggle" }))
hl.bind(mainMod .. " + SPACE", hl.dsp.focus({ window = "floating" }))
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ action = "toggle" }))
-- Move focus with mainMod + arrow keys
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
hl.bind(mainMod .. " + H", hl.dsp.focus({ direction = "left" }))
hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "right" }))
hl.bind(mainMod .. " + K", hl.dsp.focus({ direction = "up" }))
hl.bind(mainMod .. " + J", hl.dsp.focus({ direction = "down" }))
-- Move window with mainMod + SHIFT + arrow keys
hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "left" }))
hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "right" }))
hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "up" }))
hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "down" }))
hl.bind(mainMod .. " + SHIFT + H", hl.dsp.window.move({ direction = "left" }))
hl.bind(mainMod .. " + SHIFT + L", hl.dsp.window.move({ direction = "right" }))
hl.bind(mainMod .. " + SHIFT + K", hl.dsp.window.move({ direction = "up" }))
hl.bind(mainMod .. " + SHIFT + J", hl.dsp.window.move({ direction = "down" }))
for i = 1, 10 do
local key = i % 10 -- 10 maps to key 0
-- Switch workspaces
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i }))
-- Move active window to a workspace
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
-- Move active window to a workspace without following
hl.bind(mainMod .. " + CTRL + " .. key, hl.dsp.window.move({ workspace = i }))
end
-- Example special workspace (scratchpad)
-- hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
-- hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
-- Scroll through existing workspaces with mainMod + scroll
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
-- Move/resize windows with mainMod + LMB/RMB and dragging
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) -- leftclick
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) -- rightclick
-- Laptop multimedia keys for volume and LCD brightness
hl.bind(
"XF86AudioRaiseVolume",
hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"),
{ locked = true, repeating = true }
)
hl.bind(
"XF86AudioLowerVolume",
hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"),
{ locked = true, repeating = true }
)
hl.bind(
"XF86AudioMute",
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"),
{ locked = true, repeating = true }
)
hl.bind(
"XF86AudioMicMute",
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"),
{ locked = true, repeating = true }
)
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
-- Requires playerctl
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
hl.define_submap("resize", function()
-- Set repeating binds for resizing the active window.
hl.bind("right", hl.dsp.window.resize({ x = 20, y = 0, relative = true }), { repeating = true })
hl.bind("left", hl.dsp.window.resize({ x = -20, y = 0, relative = true }), { repeating = true })
hl.bind("up", hl.dsp.window.resize({ x = 0, y = 20, relative = true }), { repeating = true })
hl.bind("down", hl.dsp.window.resize({ x = 0, y = -20, relative = true }), { repeating = true })
hl.bind("H", hl.dsp.window.resize({ x = 20, y = 0, relative = true }), { repeating = true })
hl.bind("L", hl.dsp.window.resize({ x = -20, y = 0, relative = true }), { repeating = true })
hl.bind("K", hl.dsp.window.resize({ x = 0, y = 20, relative = true }), { repeating = true })
hl.bind("J", hl.dsp.window.resize({ x = 0, y = -20, relative = true }), { repeating = true })
-- Use `reset` to go back to the global submap
hl.bind("escape", hl.dsp.submap("reset"))
end)
hl.define_submap("open", "reset", function()
hl.bind("E", hl.dsp.exec_cmd("emacs"))
hl.bind("M", hl.dsp.exec_cmd("open-messaging"))
hl.bind("B", hl.dsp.exec_cmd("firefox"))
-- Use `reset` to go back to the global submap
hl.bind("escape", hl.dsp.submap("reset"))
end)
--------------------------------
---- WINDOWS AND WORKSPACES ----
--------------------------------
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
-- Default workspaces for certain windows
hl.window_rule({ match = { class = "firefox" }, workspace = "1" })
hl.window_rule({ match = { class = "Zotero" }, workspace = "8" })
hl.window_rule({ match = { class = "nheko" }, workspace = "9" })
hl.window_rule({ match = { class = "element" }, workspace = "9" })
hl.window_rule({ match = { class = "discord" }, workspace = "9" })
hl.window_rule({ match = { class = "org.telegram.desktop" }, workspace = "9" })
hl.window_rule({ match = { class = "thunderbird" }, workspace = "10" })
-- Float calculator
hl.window_rule({ match = { class = "qalculate-gtk" }, float = true })
-- Example window rules that are useful
hl.window_rule({
-- Ignore maximize requests from all apps.
name = "suppress-maximize-events",
match = { class = ".*" },
suppress_event = "maximize",
})
hl.window_rule({
-- Fix some dragging issues with XWayland
name = "fix-xwayland-drags",
match = {
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
no_focus = true,
})
-- Disable animations for selection, fixes screenshots
hl.layer_rule({
name = "no-anim-overlay",
match = { namespace = "^my-overlay$" }, -- selection
no_anim = true,
})
@@ -1,16 +1,4 @@
{ {
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
programs.hyprlock.enable = true; programs.hyprlock.enable = true;
programs.hyprlock.settings = { programs.hyprlock.settings = {
general = { general = {
@@ -19,15 +7,6 @@ in {
ignore_empty_input = true; ignore_empty_input = true;
}; };
background = [
{
color = "#${palette.base00}";
# path = "screenshot";
# blur_passes = 3;
# blur_size = 8;
}
];
input-field = [ input-field = [
{ {
size = "200, 50"; size = "200, 50";
@@ -35,9 +14,6 @@ in {
monitor = ""; monitor = "";
dots_center = true; dots_center = true;
fade_on_empty = false; fade_on_empty = false;
font_color = "#${palette.base0B}";
inner_color = "#${palette.base01}";
outer_color = "#${palette.base05}";
outline_thickness = 5; outline_thickness = 5;
placeholder_text = "Password..."; placeholder_text = "Password...";
} }
@@ -1,30 +1,10 @@
{ {pkgs, ...}: {
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
home.packages = with pkgs; [libnotify]; home.packages = with pkgs; [libnotify];
services.mako = { services.mako = {
enable = true; enable = true;
settings = { settings = {
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender 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}
# '';
}; };
}; };
} }
@@ -0,0 +1,628 @@
[audio]
enable_overdrive = true
enable_sounds = false
notification_sound = ""
sound_volume = 0.5
volume_change_sound = ""
[backdrop]
blur_intensity = 0.5
enabled = false
tint_intensity = 0.30000001192092896
[bar]
order = [ "widgets" ]
[bar.widgets]
auto_hide = false
background_opacity = 1.0
border = "outline"
border_width = 0.0
capsule = false
capsule_fill = "surface_variant"
capsule_group = []
capsule_opacity = 1.0
capsule_padding = 6.0
capsule_thickness = 0.75999999046325684
center = []
contact_shadow = false
enabled = true
end = [
"cpu",
"ram",
"sysmon",
"network_rx",
"network_tx",
"volume",
"battery",
"clock",
"network",
"clipboard",
"tray"
]
font_weight = 500
layer = "top"
margin_edge = 0
margin_ends = 0
margin_opposite_edge = 0
padding = 14
panel_overlap = 1
position = "bottom"
radius = 0
radius_bottom_left = 0
radius_bottom_right = 0
radius_top_left = 0
radius_top_right = 0
reserve_space = true
scale = 1.0
shadow = false
show_on_workspace_switch = true
start = [ "workspaces" ]
thickness = 34
widget_spacing = 12
[bar.widgets.dead_zone]
command = ""
middle_command = ""
right_command = ""
scroll_down_command = ""
scroll_up_command = ""
[battery]
warning_threshold = 10
[brightness]
enable_ddcutil = false
ignore_mmids = []
minimum_brightness = 0.0
sync_all_monitors = false
[calendar]
enabled = false
refresh_minutes = 15
[control_center]
hidden_tabs = []
sidebar = "full"
sidebar_section = "full"
width = 700
[[control_center.shortcuts]]
type = "wifi"
[[control_center.shortcuts]]
type = "bluetooth"
[[control_center.shortcuts]]
type = "caffeine"
[[control_center.shortcuts]]
type = "nightlight"
[[control_center.shortcuts]]
type = "notification"
[[control_center.shortcuts]]
type = "power_profile"
[desktop_widgets]
enabled = false
schema_version = 2
[desktop_widgets.grid]
cell_size = 16
major_interval = 4
visible = true
[dock]
active_monitor_only = false
active_opacity = 1.0
active_scale = 1.0
auto_hide = false
background_opacity = 0.87999999523162842
cross_axis_padding = 8
enabled = false
icon_size = 48
inactive_opacity = 0.85000002384185791
inactive_scale = 0.85000002384185791
item_spacing = 6
launcher_icon = "grid-dots"
launcher_position = "none"
magnification = true
magnification_scale = 1.4500000476837158
main_axis_padding = 16
margin_edge = 8
margin_ends = 0
monitors = []
pinned = []
position = "bottom"
radius = 16
radius_bottom_left = 16
radius_bottom_right = 16
radius_top_left = 16
radius_top_right = 16
reserve_space = true
shadow = true
show_dots = false
show_instance_count = true
show_running = true
[hooks]
battery_charging = []
battery_discharging = []
battery_percentage_changed = []
battery_plugged = []
bluetooth_disabled = []
bluetooth_enabled = []
colors_changed = []
logging_out = []
power_profile_changed = []
rebooting = []
session_locked = []
session_unlocked = []
shutting_down = []
started = []
theme_mode_changed = []
wallpaper_changed = []
wifi_disabled = []
wifi_enabled = []
[idle]
behavior_order = [ "lock", "screen-off", "lock-and-suspend" ]
pre_action_fade_seconds = 0.0
[idle.behavior.lock]
action = "lock"
command = ""
enabled = false
resume_command = ""
timeout = 600.0
[idle.behavior.lock-and-suspend]
action = "lock_and_suspend"
command = ""
enabled = false
resume_command = ""
timeout = 900.0
[idle.behavior.screen-off]
action = "screen_off"
command = ""
enabled = false
resume_command = ""
timeout = 660.0
[keybinds]
cancel = [ "Escape" ]
down = [ "Down" ]
left = [ "Left" ]
right = [ "Right" ]
tab_next = [ "Tab" ]
tab_previous = [ "Shift+ISO_Left_Tab" ]
up = [ "Up" ]
validate = [ "Return", "KP_Enter", "space" ]
[location]
address = "Würzburg, Germany"
auto_locate = false
sunrise = ""
sunset = ""
[lockscreen]
allow_empty_password = false
blur_intensity = 0.5
blurred_desktop = false
enabled = false
fingerprint = true
monitors = []
tint_intensity = 0.30000001192092896
wallpaper = ""
[lockscreen_widgets]
enabled = false
schema_version = 2
widget_order = [ "lockscreen-login-box@HDMI-A-1", "lockscreen-login-box@eDP-1" ]
[lockscreen_widgets.grid]
cell_size = 16
major_interval = 4
visible = true
[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1"]
box_height = 70.0
box_width = 400.0
cx = 960.0
cy = 961.0
enabled = true
output = "HDMI-A-1"
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
input_opacity = 1.0
input_radius = 6.0
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_password_hint = true
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1"]
box_height = 70.0
box_width = 400.0
cx = 960.0
cy = 961.0
enabled = true
output = "eDP-1"
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
input_opacity = 1.0
input_radius = 6.0
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_password_hint = true
[nightlight]
enabled = false
force = false
temperature_day = 6500
temperature_night = 4000
[notification]
background_opacity = 0.97000002861022949
collapse_on_dismiss = true
enable_daemon = false
layer = "top"
monitors = []
offset_x = 20
offset_y = 8
position = "top_right"
scale = 1.0
show_actions = true
show_app_name = true
[osd]
background_opacity = 0.97000002861022949
monitors = []
offset_x = 20
offset_y = 8
orientation = "horizontal"
position = "top_center"
position_vertical = "top_center"
scale = 1.0
[osd.kinds]
bluetooth = false
brightness = false
caffeine = false
dnd = false
keyboard_layout = false
lock_keys = false
media = false
nightlight = false
power_profile = false
privacy = false
volume = false
volume_input = true
volume_output = true
wifi = false
[plugins]
enabled = []
[[plugins.source]]
auto_update = false
enabled = true
kind = "git"
location = "https://github.com/noctalia-dev/official-plugins"
name = "official"
[[plugins.source]]
auto_update = false
enabled = true
kind = "git"
location = "https://github.com/noctalia-dev/community-plugins"
name = "community"
[shell]
app_icon_colorize = false
avatar_path = ""
clipboard_auto_paste = "auto"
clipboard_confirm_clear_history = true
clipboard_enabled = true
clipboard_history_max_entries = 100
clipboard_image_action_command = ""
corner_radius_scale = 1.0
date_format = "%A, %x"
disable_mipmaps = false
font_family = "sans-serif"
launch_apps_as_systemd_services = false
launch_apps_custom_command = ""
middle_click_opens_widget_settings = true
niri_overview_type_to_launch_enabled = false
offline_mode = false
password_style = "default"
polkit_agent = false
screen_time_enabled = false
settings_show_advanced = false
setup_wizard_enabled = true
shared_gl_context = true
show_location = true
telemetry_enabled = false
time_format = "{:%H:%M}"
ui_scale = 1.0
[shell.animation]
enabled = false
speed = 1.0
[shell.greeter_sync]
auto_sync = false
[shell.launcher]
app_grid = false
categories = true
compact = true
session_search = false
show_icons = true
sort_by_usage = true
[shell.launcher.dmenu]
[shell.mpris]
blacklist = []
[shell.panel]
borders = true
clipboard_placement = "attached"
clipboard_position = "center"
control_center_placement = "attached"
control_center_position = "auto"
floating_offset = 13
launcher_placement = "floating"
launcher_position = "center"
open_near_click_clipboard = true
open_near_click_control_center = true
open_near_click_launcher = false
open_near_click_session = true
open_near_click_wallpaper = true
polkit_placement = "floating"
polkit_position = "center"
session_placement = "attached"
session_position = "auto"
shadow = true
transparency_mode = "solid"
wallpaper_placement = "attached"
wallpaper_position = "auto"
[shell.privacy]
cam_filter_regex = ""
mic_filter_regex = ""
[shell.screen_corners]
enabled = false
size = 32
[shell.screenshot]
confirm_region = false
copy_to_clipboard = true
directory = ""
filename_pattern = ""
freeze_screen = true
pipe_command = ""
pipe_to_command = false
save_to_file = true
[shell.session.power]
[[shell.session.actions]]
action = "lock"
command = ""
countdown_seconds = 0.0
enabled = true
glyph = ""
label = ""
shortcut = "1"
variant = "default"
[[shell.session.actions]]
action = "logout"
command = ""
countdown_seconds = 0.0
enabled = true
glyph = ""
label = ""
shortcut = "2"
variant = "default"
[[shell.session.actions]]
action = "lock_and_suspend"
command = ""
countdown_seconds = 0.0
enabled = false
glyph = ""
label = ""
shortcut = "3"
variant = "default"
[[shell.session.actions]]
action = "reboot"
command = ""
countdown_seconds = 0.0
enabled = true
glyph = ""
label = ""
shortcut = "4"
variant = "default"
[[shell.session.actions]]
action = "shutdown"
command = ""
countdown_seconds = 0.0
enabled = true
glyph = ""
label = ""
shortcut = "5"
variant = "destructive"
[shell.shadow]
alpha = 0.55000001192092896
direction = "down"
[system.monitor]
cpu_poll_seconds = 2.0
cpu_temp_activity_threshold = 60.0
cpu_temp_critical_threshold = 85.0
cpu_temp_sensor_path = ""
cpu_usage_activity_threshold = 50.0
cpu_usage_critical_threshold = 90.0
disk_pct_activity_threshold = 80.0
disk_pct_critical_threshold = 95.0
disk_poll_seconds = 10.0
enabled = true
gpu_poll_seconds = 0.0
gpu_temp_activity_threshold = 60.0
gpu_temp_critical_threshold = 85.0
gpu_usage_activity_threshold = 50.0
gpu_usage_critical_threshold = 95.0
gpu_vram_activity_threshold = 50.0
gpu_vram_critical_threshold = 90.0
memory_poll_seconds = 2.0
net_rx_activity_threshold = 1.0
net_rx_critical_threshold = 50.0
net_tx_activity_threshold = 1.0
net_tx_critical_threshold = 50.0
network_poll_seconds = 3.0
ram_pct_activity_threshold = 60.0
ram_pct_critical_threshold = 90.0
swap_pct_activity_threshold = 20.0
swap_pct_critical_threshold = 80.0
[theme]
builtin = "Catppuccin"
community_palette = "Oxocarbon"
custom_palette = ""
mode = "dark"
source = "builtin"
wallpaper_scheme = "m3-content"
[theme.templates]
builtin_ids = []
community_ids = []
enable_builtin_templates = false
enable_community_templates = false
[wallpaper]
directory = ""
directory_dark = ""
directory_light = ""
edge_smoothness = 0.30000001192092896
enabled = false
fill_color = ""
fill_mode = "crop"
per_monitor_directories = false
transition = [ "fade", "wipe", "disc", "stripes", "zoom", "honeycomb" ]
transition_duration = 1500.0
transition_on_startup = false
[wallpaper.automation]
enabled = false
interval_seconds = 1800
order = "random"
recursive = true
[weather]
effects = true
enabled = true
refresh_minutes = 30
unit = "metric"
[widget.active_window]
icon_size = 14.0
max_length = 260.0
min_length = 80.0
title_scroll = "none"
type = "active_window"
[widget.clock]
format = "{:%a %d.%m. %H:%M:%S}"
type = "clock"
[widget.cpu]
display = "text"
stat = "cpu_usage"
type = "sysmon"
[widget.custom_button_2]
type = "custom_button"
[widget.date]
format = "{:%a %d %b}"
type = "clock"
[widget.input_volume]
device = "input"
type = "volume"
[widget.keyboard_layout]
cycle_command = ""
hide_when_single_layout = false
type = "keyboard_layout"
[widget.lock_keys]
display = "short"
hide_when_off = false
show_caps_lock = true
show_num_lock = true
show_scroll_lock = false
type = "lock_keys"
[widget.media]
art_size = 16.0
max_length = 220.0
min_length = 80.0
title_scroll = "none"
type = "media"
[widget.network_rx]
display = "text"
stat = "net_rx"
type = "sysmon"
[widget.network_tx]
display = "text"
stat = "net_tx"
type = "sysmon"
[widget.output_volume]
device = "output"
type = "volume"
[widget.ram]
display = "text"
stat = "ram_pct"
type = "sysmon"
[widget.spacer]
type = "spacer"
[widget.sysmon]
display = "text"
stat = "disk_pct"
type = "sysmon"
[widget.temp]
stat = "cpu_temp"
type = "sysmon"
[widget.workspaces]
scale = 1.1000000000000001
type = "workspaces"
+1 -1
View File
@@ -31,7 +31,7 @@
in { in {
services.swayidle = { services.swayidle = {
enable = true; enable = true;
systemdTarget = "graphical-session.target"; systemdTargets = ["graphical-session.target"];
timeouts = timeouts =
# Lock screen # Lock screen
[ [
@@ -1,14 +1,7 @@
{ {
config,
pkgs,
...
}: let
inherit (config.colorscheme) colors;
in {
programs.swaylock = { programs.swaylock = {
enable = true; enable = true;
settings = { settings = {
color = "000000";
ignore-empty-password = true; ignore-empty-password = true;
indicator-idle-visible = false; indicator-idle-visible = false;
}; };
@@ -2,66 +2,17 @@
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use # 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 INTERNAL_MONITOR="@INTERNAL_MONITOR@"
# Additionally it's called with a keybind to switch between a laptop monitor and an external display EXTERNAL_MONITOR="@EXTERNAL_MONITOR@"
# 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() { MIRROR_SETTING=$(hyprctl monitors all -j | jq -r --arg EXTERNAL "$EXTERNAL_MONITOR" '.[] | select(.name == $EXTERNAL) | .mirrorOf')
# TARGET_MONITOR="$1"
# hyprctl workspaces | grep ^workspace | cut --delimiter ' ' --fields 3 | xargs -I '{}' hyprctl dispatch moveworkspacetomonitor '{}' "$TARGET_MONITOR" echo "current setting: "
# # 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 echo $MIRROR_SETTING
if [ "$MIRROR_SETTING" = "none" ]; then if [ "$MIRROR_SETTING" = "none" ]; then
echo "mirroring..." echo "mirroring..."
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1, mirror, $INTERNAL_MONITOR" hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"$INTERNAL_MONITOR\"})"
else 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, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1" hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"\"})"
fi fi
@@ -1,13 +1,8 @@
{ {config, ...}: let
options, palette = config.lib.stylix.colors;
config,
pkgs,
lib,
inputs,
...
}: let
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
in { in {
stylix.targets.waybar.enable = false;
programs.waybar = { programs.waybar = {
enable = true; enable = true;
# systemd.enable = true; # systemd.enable = true;
@@ -1,39 +1,3 @@
{ {pkgs, ...}: {
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
in {
home.packages = with pkgs; [wlogout]; 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;
# }
# '';
} }
@@ -1,86 +1,5 @@
{ {pkgs, ...}: {
options,
config,
lib,
pkgs,
inputs,
...
}: let
inherit
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette
;
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 = ''
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%;
}
'';
} }
@@ -1,33 +0,0 @@
{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}";
};
};
}
+3 -3
View File
@@ -22,9 +22,9 @@
# Prevent screen from going blank (check these settings with `xset q`) # Prevent screen from going blank (check these settings with `xset q`)
# And disable bell sound (b) # And disable bell sound (b)
xsession.initExtra = '' xsession.initExtra = ''
${pkgs.xorg.xset}/bin/xset s off ${pkgs.xset}/bin/xset s off
${pkgs.xorg.xset}/bin/xset -dpms ${pkgs.xset}/bin/xset -dpms
${pkgs.xorg.xset}/bin/xset b off ${pkgs.xset}/bin/xset b off
''; '';
xsession.windowManager.i3 = { xsession.windowManager.i3 = {
enable = true; enable = true;
+1 -1
View File
@@ -18,7 +18,7 @@
fd fd
stylua stylua
black black
nixfmt-rfc-style # nixfmt nixfmt # nixfmt
]; ];
programs.nixvim = { programs.nixvim = {
+1 -1
View File
@@ -37,7 +37,7 @@
usbutils # lsusb usbutils # lsusb
wget wget
wireguard-tools # wg-quick wireguard-tools # wg-quick
xorg.xkill xkill
zip zip
dig dig
@@ -1,5 +1,5 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [../../gtk]; # imports = [./stylix.nix];
services.blueman-applet.enable = true; services.blueman-applet.enable = true;
services.nextcloud-client.enable = true; services.nextcloud-client.enable = true;
@@ -18,6 +18,11 @@
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
(anki.withAddons [
ankiAddons.anki-connect
ankiAddons.passfail2
ankiAddons.review-heatmap
])
arandr arandr
calibre # ebook manager and viewer calibre # ebook manager and viewer
# digikam # digikam
@@ -39,7 +44,7 @@
# kitty # Terminal, already available as feature # kitty # Terminal, already available as feature
libnotify libnotify
libreoffice libreoffice
mate.engrampa engrampa
nomacs # Image viewer nomacs # Image viewer
kdePackages.okular # Pdf reader with many features, good for commenting documents kdePackages.okular # Pdf reader with many features, good for commenting documents
pavucontrol pavucontrol
@@ -48,15 +53,15 @@
qpdfview qpdfview
# qutebrowser # qutebrowser
# realvnc-vnc-viewer # realvnc-vnc-viewer
# rpi-imager # make isos rpi-imager # make isos
# rustdesk # rustdesk
tor-browser tor-browser
rusty-path-of-building # Path of Building for poe1 and poe2 rusty-path-of-building # Path of Building for poe1 and poe2
vlc vlc
wineWowPackages.stable # 32-bit and 64-bit wine wineWow64Packages.stable # 32-bit and 64-bit wine
winetricks winetricks
xclip # x11 clipboard access from terminal xclip # x11 clipboard access from terminal
xfce.mousepad # simple text editor mousepad # simple text editor
xournalpp # Edit pdf files xournalpp # Edit pdf files
zoom-us # Video conferencing zoom-us # Video conferencing
zotero # Manage papers and other sources zotero # Manage papers and other sources
@@ -65,6 +70,9 @@
networkmanager-openvpn networkmanager-openvpn
keepassxc keepassxc
unstable.joplin-desktop
unstable.libation
## My scripts ## My scripts
frajul.open-messaging frajul.open-messaging
frajul.xwacomcalibrate frajul.xwacomcalibrate
@@ -1,10 +1,18 @@
{pkgs, ...}: { {
pkgs,
inputs,
...
}: {
programs.opencode = { programs.opencode = {
enable = true; enable = true;
package = pkgs.unstable.opencode; package = pkgs.unstable.opencode;
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
inputs.vortix.packages.${pkgs.system}.default # tui for wireguard
worktrunk # interface for git worktrees
watchexec # Run command when any file in current dir changes watchexec # Run command when any file in current dir changes
android-tools # adb android-tools # adb
# shellcheck # Check bash scripts for common errors # shellcheck # Check bash scripts for common errors
@@ -65,6 +73,7 @@
sops sops
pandoc # markdown preview pandoc # markdown preview
docker-compose docker-compose
mise
mise mise
+1 -4
View File
@@ -16,11 +16,8 @@
xclip xclip
]; ];
home.shellAliases = {
y = "yy"; # Yazi shell wrapper (cd on quit)
};
programs.yazi.enable = true; programs.yazi.enable = true;
programs.yazi.shellWrapperName = "y";
programs.yazi.enableFishIntegration = true; programs.yazi.enableFishIntegration = true;
programs.yazi.settings.manager = { programs.yazi.settings.manager = {
sort_by = "mtime"; sort_by = "mtime";
+3 -3
View File
@@ -3,9 +3,9 @@
pkgs, pkgs,
... ...
}: { }: {
home.file = { # home.file = {
".config/starship.toml".source = ./starship.toml; # ".config/starship.toml".source = ./starship.toml;
}; # };
home.packages = with pkgs; [starship]; home.packages = with pkgs; [starship];
-10
View File
@@ -57,14 +57,4 @@
sessionPath = ["$HOME/.local/bin"]; 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;
# };
} }
+2 -2
View File
@@ -20,8 +20,8 @@
"text/calendar" = thunderbird; "text/calendar" = thunderbird;
"application/x-extension-ics" = thunderbird; "application/x-extension-ics" = thunderbird;
"x-scheme-handler/webcals" = thunderbird; "x-scheme-handler/webcals" = thunderbird;
"application/zip" = mate.engrampa; "application/zip" = engrampa;
"text/plain" = xfce.mousepad; "text/plain" = mousepad;
"image/jpeg" = nomacs; "image/jpeg" = nomacs;
"application/pdf" = evince; "application/pdf" = evince;
"text/html" = firefox; "text/html" = firefox;
+20 -13
View File
@@ -1,17 +1,14 @@
# Only apply this to home-manager standalone # Only apply this to home-manager standalone
{outputs, ...}: { {
# Apply overlays inputs,
nixpkgs = { outputs,
overlays = builtins.attrValues outputs.overlays; pkgs,
config = { ...
allowUnfree = true; }: {
allowUnfreePredicate = _: true; # TODO: what is this imports = [inputs.stylix.homeModules.stylix];
permittedInsecurePackages = [
"olm-3.2.16" stylix.enable = true;
]; stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
warn-dirty = false;
};
};
# Expire old hm generations # Expire old hm generations
hm-expire = { hm-expire = {
@@ -27,6 +24,16 @@
persistent = true; persistent = true;
}; };
nixpkgs = {
# Apply overlays
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this
warn-dirty = false;
};
};
# Setup binary caches # Setup binary caches
nix.settings = { nix.settings = {
substituters = [ substituters = [
+31 -21
View File
@@ -26,34 +26,44 @@
is-nixos = true; is-nixos = true;
terminal = "alacritty"; terminal = "alacritty";
# --------- --------- # ---------- -------- ---------
# | DVI-D-1 | | DVI-D-2 | # | HDMI-A-1 | | DP-1 | | DVI-D-1 |
# --------- --------- # ---------- -------- ---------
monitors = [ monitors = [
{ {
name = "DVI-D-1"; name = "HDMI-A-1";
width = 1680; width = 1920;
height = 1050; height = 1080;
position = "0x0";
workspaces = [ workspaces = [
"1"
"2"
"3"
"4"
"5"
];
primary = true;
}
{
name = "DVI-D-2";
width = 1680;
height = 1050;
workspaces = [
"6"
"7"
"8" "8"
"9" "9"
"10" "10"
]; ];
} }
{
name = "DP-1";
width = 1680;
height = 1050;
position = "1920x0";
workspaces = [
"1"
"2"
"3"
"4"
];
primary = true;
}
{
name = "DVI-D-1";
width = 1680;
height = 1050;
position = "3600x0";
workspaces = [
"5"
"6"
"7"
];
}
]; ];
} }
-1
View File
@@ -38,6 +38,5 @@ with pkgs; [
devbox # reproducible dev envs based on nix devbox # reproducible dev envs based on nix
mysql80
devenv devenv
] ]
+6 -2
View File
@@ -6,7 +6,7 @@
"${pwd}/features-nixos/users/julian" "${pwd}/features-nixos/users/julian"
"${pwd}/features-nixos/optional/binarycaches.nix" "${pwd}/features-nixos/optional/binarycaches.nix"
"${pwd}/features-nixos/optional/remote-builder.nix" # "${pwd}/features-nixos/optional/remote-builder.nix"
"${pwd}/features-nixos/optional/boot-efi.nix" "${pwd}/features-nixos/optional/boot-efi.nix"
"${pwd}/features-nixos/optional/greetd.nix" "${pwd}/features-nixos/optional/greetd.nix"
@@ -21,8 +21,10 @@
"${pwd}/features-nixos/optional/wireguard.nix" "${pwd}/features-nixos/optional/wireguard.nix"
"${pwd}/features-nixos/optional/wireshark.nix" "${pwd}/features-nixos/optional/wireshark.nix"
"${pwd}/features-nixos/optional/flatpak.nix" "${pwd}/features-nixos/optional/flatpak.nix"
"${pwd}/features-nixos/optional/k9s"
"${pwd}/features-nixos/optional/avahi.nix" "${pwd}/features-nixos/optional/avahi.nix"
"${pwd}/features-nixos/optional/solokey.nix"
]; ];
networking.hostName = "aspi"; networking.hostName = "aspi";
@@ -30,6 +32,9 @@
# networking.firewall.checkReversePath = false; # Makes wg interface with all ips work # networking.firewall.checkReversePath = false; # Makes wg interface with all ips work
programs.ausweisapp.enable = true;
programs.ausweisapp.openFirewall = true; # for pairing with smartphone
modules = { modules = {
syncthing = { syncthing = {
enable = true; enable = true;
@@ -42,7 +47,6 @@
}; };
programs.hyprland.enable = true; programs.hyprland.enable = true;
services.desktopManager.plasma6.enable = true;
services.blueman.enable = true; services.blueman.enable = true;
services.upower.enable = true; services.upower.enable = true;
+5
View File
@@ -75,4 +75,9 @@
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.nvidia.open = false; hardware.nvidia.open = false;
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
} }
+41 -170
View File
@@ -4,10 +4,16 @@
{ {
pwd, pwd,
config, config,
pkgs, inputs,
outputs,
lib,
... ...
}: { }: {
imports = [ imports =
[
inputs.disko.nixosModules.disko
./disko.nix
./hardware-configuration.nix ./hardware-configuration.nix
"${pwd}/features-nixos/global/fish.nix" # fish for admin "${pwd}/features-nixos/global/fish.nix" # fish for admin
@@ -15,7 +21,20 @@
"${pwd}/features-nixos/global/nix.nix" "${pwd}/features-nixos/global/nix.nix"
"${pwd}/features-nixos/global/sops.nix" "${pwd}/features-nixos/global/sops.nix"
"${pwd}/features-nixos/global/root.nix" "${pwd}/features-nixos/global/root.nix"
];
# "${pwd}/features-nixos/optional/hydra.nix"
# "${pwd}/features-nixos/optional/jenkins-agent.nix"
]
++ (builtins.attrValues outputs.nixosModules);
frajul.gitlab-runner = {
enable = false;
secretsFile = ./secrets.yaml;
};
frajul.gitea-runner = {
enable = true;
secretsFile = ./secrets.yaml;
};
networking.hostName = "builder"; networking.hostName = "builder";
system.stateVersion = "23.11"; system.stateVersion = "23.11";
@@ -66,22 +85,22 @@
fallback = true; fallback = true;
}; };
# system.autoUpgrade = { system.autoUpgrade = {
# enable = true; enable = true;
# flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles"; flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
# flags = [ flags = [
# "--recreate-lock-file" # update lock file "--recreate-lock-file" # update lock file
# ]; ];
# dates = "02:13"; dates = "02:13";
# }; };
# optimize store by hardlinking store files # optimize store by hardlinking store files
nix.optimise.automatic = true; nix.optimise.automatic = lib.mkForce true;
nix.optimise.dates = ["03:15"]; nix.optimise.dates = lib.mkForce ["03:15"];
# nix.gc.automatic = true; nix.gc.automatic = lib.mkForce true;
# nix.gc.dates = "daily"; nix.gc.dates = lib.mkForce "daily";
# nix.gc.options = "--delete-old"; nix.gc.options = lib.mkForce "--delete-old";
# nix.settings.keep-derivations = false; # nix.settings.keep-derivations = false;
# nix.settings.keep-outputs = true; # nix.settings.keep-outputs = true;
@@ -101,55 +120,12 @@
OOMScoreAdjust = 500; OOMScoreAdjust = 500;
}; };
# Ollama used by open-webui as llm backend
services.ollama = {
enable = true;
# acceleration = "rocm";
openFirewall = true;
};
services.nextjs-ollama-llm-ui = {
enable = true;
hostname = "192.168.3.118";
port = 3001;
};
# services.open-webui = {
# enable = true;
# port = 8080;
# openFirewall = true;
# host = "builder.julian-mutter.de";
# };
networking.firewall.allowedTCPPorts = [
80
3001 # ollama-ui
];
services.openssh = { services.openssh = {
enable = true; enable = true;
# require public key authentication for better security # require public key authentication for better security
settings.PasswordAuthentication = false; settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false; settings.KbdInteractiveAuthentication = false;
settings.PermitRootLogin = "yes"; settings.PermitRootLogin = "yes";
# Add older algorithms for jenkins ssh-agents-plugin to be compatible
settings.Macs = [
"hmac-sha2-512-etm@openssh.com"
"hmac-sha2-256-etm@openssh.com"
"umac-128-etm@openssh.com"
"hmac-sha2-512"
"hmac-sha2-256"
"umac-128@openssh.com"
];
settings.KexAlgorithms = [
"diffie-hellman-group-exchange-sha1"
"diffie-hellman-group14-sha1"
"mlkem768x25519-sha256"
"sntrup761x25519-sha512"
"sntrup761x25519-sha512@openssh.com"
"curve25519-sha256"
"curve25519-sha256@libssh.org"
"diffie-hellman-group-exchange-sha256"
];
}; };
users.users."root".openssh.authorizedKeys.keys = [ users.users."root".openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi"
@@ -163,20 +139,6 @@
# security.pam.sshAgentAuth.enable = true; # enable sudo via ssh # 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 itpwd as build machine so system emulation is properly supported # add builder itpwd as build machine so system emulation is properly supported
# nix.distributedBuilds = true; # nix.distributedBuilds = true;
nix.buildMachines = [ nix.buildMachines = [
@@ -199,84 +161,30 @@
} }
]; ];
# Uris allowed as flake inputs, otherwise hydra does not fetch them networking.firewall.allowedTCPPorts = [
nix.settings.allowed-uris = [ 80
"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 = { services.nginx = {
enable = true; enable = true;
recommendedProxySettings = 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;"
# ;
};
};
# nix-serve
virtualHosts."binarycache.julian-mutter.de" = { virtualHosts."binarycache.julian-mutter.de" = {
locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}"; locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
}; };
# attic
clientMaxBodySize = "2G"; clientMaxBodySize = "2G";
virtualHosts."cache.julian-mutter.de" = { virtualHosts."cache.julian-mutter.de" = {
locations."/".proxyPass = "http://127.0.0.1:8080"; 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 = [
# provide a debian base with nodejs for actions
"debian-latest:docker://node:18-bullseye"
# fake the ubuntu name, because node provides no ubuntu builds
"ubuntu-latest:docker://node:18-bullseye"
# devenv
"devenv:docker://ghcr.io/cachix/devenv/devenv:latest"
# provide native execution on the host
"nixos:host"
];
};
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 ========== # =========== Binary Cache ==========
sops.secrets."nix_serve_key".sopsFile = ./secrets.yaml;
services.nix-serve = { services.nix-serve = {
enable = true; enable = true;
secretKeyFile = "/var/cache-priv-key.pem"; secretKeyFile = config.sops.secrets."nix_serve_key".path;
}; };
# =========== Binary Cache with attic ========== # =========== Binary Cache with attic ==========
@@ -314,41 +222,4 @@
}; };
}; };
}; };
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"
];
};
### Jenkins node
users.users.jenkins = {
createHome = true;
home = "/var/lib/jenkins";
group = "jenkins";
isNormalUser = true;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ36sQhVz3kUEi8754G7r3rboihhG4iqFK/UvQm6SING jenkins@home"
];
packages = with pkgs; [
git
devenv
];
extraGroups = [
"docker"
];
};
users.groups.jenkins = {};
programs.java = {
enable = true;
package = pkgs.jdk21; # Same as jenkins version on home
};
} }
+56
View File
@@ -0,0 +1,56 @@
# Example to create a bios compatible gpt partition
{ lib, ... }:
{
disko.devices = {
disk.disk1 = {
device = lib.mkDefault "/dev/sda";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
esp = {
name = "ESP";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
name = "root";
size = "100%";
content = {
type = "lvm_pv";
vg = "pool";
};
};
};
};
};
lvm_vg = {
pool = {
type = "lvm_vg";
lvs = {
root = {
size = "100%FREE";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
mountOptions = [
"defaults"
];
};
};
};
};
};
};
}
-30
View File
@@ -7,43 +7,13 @@
"sd_mod" "sd_mod"
"sr_mod" "sr_mod"
]; ];
# boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support
boot.kernelModules = []; boot.kernelModules = [];
boot.extraModulePackages = []; 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.useDHCP = lib.mkDefault true;
# networking.interfaces.ens18.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 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.enable = true;
boot.loader.grub.device = "/dev/sda";
# Emulated systems used as alternative to cross-compiling # Emulated systems used as alternative to cross-compiling
boot.binfmt.emulatedSystems = ["aarch64-linux"]; boot.binfmt.emulatedSystems = ["aarch64-linux"];
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINgH+4xJMk4K5uBIq4hKwar4wt6GYCRE3Z2S4HETc4TK root@builder
+11 -4
View File
@@ -11,7 +11,7 @@
"${pwd}/features-nixos/users/wolfi" "${pwd}/features-nixos/users/wolfi"
"${pwd}/features-nixos/optional/binarycaches.nix" "${pwd}/features-nixos/optional/binarycaches.nix"
"${pwd}/features-nixos/optional/remote-builder.nix" # "${pwd}/features-nixos/optional/remote-builder.nix"
"${pwd}/features-nixos/optional/boot-efi.nix" "${pwd}/features-nixos/optional/boot-efi.nix"
"${pwd}/features-nixos/optional/greetd.nix" "${pwd}/features-nixos/optional/greetd.nix"
@@ -26,15 +26,22 @@
"${pwd}/features-nixos/optional/podman.nix" "${pwd}/features-nixos/optional/podman.nix"
"${pwd}/features-nixos/optional/wireshark.nix" "${pwd}/features-nixos/optional/wireshark.nix"
"${pwd}/features-nixos/optional/flatpak.nix" "${pwd}/features-nixos/optional/flatpak.nix"
"${pwd}/features-nixos/optional/k9s"
"${pwd}/features-nixos/optional/solokey.nix"
]; ];
networking.hostName = "kardorf"; networking.hostName = "kardorf";
system.stateVersion = "22.11"; system.stateVersion = "22.11";
# Not using the drivers leads to way better results programs.ausweisapp.enable = true;
# services.xserver.videoDrivers = [ "nvidia" ]; programs.ausweisapp.openFirewall = true; # for pairing with smartphone
networking.networkmanager.insertNameservers = ["192.168.3.252"]; modules = {
syncthing = {
enable = true;
overrideSettings = false;
};
};
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
programs.steam.enable = true; programs.steam.enable = true;
+23 -53
View File
@@ -1,89 +1,59 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ {
config, config,
lib, lib,
modulesPath,
... ...
}: { }: {
boot.initrd.availableKernelModules = [ imports = [
"ehci_pci" (modulesPath + "/installer/scan/not-detected.nix")
"ahci"
"xhci_pci"
"usbhid"
"uas"
"usb_storage"
"sd_mod"
"sr_mod"
]; ];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "sd_mod"];
boot.initrd.kernelModules = []; boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"]; boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = []; boot.extraModulePackages = [];
boot.loader.efi.efiSysMountPoint = "/boot/efi"; boot.loader.efi.efiSysMountPoint = "/boot/efi";
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94"; device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=root"];
"subvol=root"
"compress=zstd"
];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94";
fsType = "btrfs";
options = [
"subvol=home"
"compress=zstd"
];
}; };
fileSystems."/nix" = { fileSystems."/nix" = {
device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94"; device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=nix"];
"subvol=nix"
"compress=zstd"
"noatime"
];
}; };
fileSystems."/swap" = { fileSystems."/swap" = {
device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94"; device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=swap"];
"subvol=swap" };
"noatime"
]; fileSystems."/home" = {
device = "/dev/disk/by-uuid/97a9342e-0be0-4193-9a25-03400fc7da94";
fsType = "btrfs";
options = ["subvol=home"];
}; };
fileSystems."/boot/efi" = { fileSystems."/boot/efi" = {
device = "/dev/disk/by-uuid/7D48-A59C"; device = "/dev/disk/by-uuid/7D48-A59C";
fsType = "vfat"; fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
}; };
swapDevices = [ swapDevices = [];
{
device = "/swap/swapfile";
size = 16 * 1024;
}
];
# 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.docker0.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# Use latest version of driver
# hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.legacy_470;
hardware.nvidia.modesetting.enable = true; # produces errors, display manager fails to start
hardware.nvidia.nvidiaSettings = true; services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia.open = false;
hardware.nvidia = {
modesetting.enable = true;
open = false;
};
} }
+2
View File
@@ -3,4 +3,6 @@
syncthing = import ./syncthing.nix; syncthing = import ./syncthing.nix;
frajulAutoUpgrade = import ./frajul-auto-upgrade.nix; frajulAutoUpgrade = import ./frajul-auto-upgrade.nix;
pianoLEDVisualizer = import ./piano-led-visualizer.nix; pianoLEDVisualizer = import ./piano-led-visualizer.nix;
gitea-runner = import ./gitea-runner.nix;
gitlab-runner = import ./gitlab-runner.nix;
} }
+57
View File
@@ -0,0 +1,57 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.frajul.gitea-runner;
in {
options = {
frajul.gitea-runner = {
enable = lib.mkEnableOption "gitea-runner";
secretsFile = lib.mkOption {
type = lib.types.path;
description = "A sops encrpyted file containing a 'gitea_token' secret";
};
};
};
config = lib.mkIf cfg.enable {
virtualisation.docker.enable = true;
sops.secrets."gitea_token" = {
owner = config.users.users.nix.name;
sopsFile = cfg.secretsFile;
};
services.gitea-actions-runner.instances."builder" = {
enable = true;
url = "https://gitlab.julian-mutter.de";
name = "builder";
tokenFile = config.sops.secrets."gitea_token".path;
labels = [
# fake the ubuntu name, because node provides no ubuntu builds
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
# my custom nix+devenv ci container
"nix-ci:docker://gitlab.julian-mutter.de/julian/nix-ci-container:latest"
# devenv
"devenv:docker://ghcr.io/cachix/devenv/devenv:latest"
# provide native execution on the host
"nixos:host"
];
# Packages are intjected into PATH for "nixos:host"
hostPackages = with pkgs; [
bash
coreutils
curl
gawk
gitMinimal
nodejs # Required by many standard actions (like actions/checkout)
docker
devenv
wget
nix
];
};
};
}
+31
View File
@@ -0,0 +1,31 @@
{
config,
lib,
...
}: let
cfg = config.frajul.gitlab-runner;
in {
options = {
frajul.gitlab-runner = {
enable = lib.mkEnableOption "gitlab-runner";
secretsFile = lib.mkOption {
type = lib.types.path;
description = "A sops encrpyted file containing a 'gitlab_runner_token' secret";
};
};
};
config = lib.mkIf cfg.enable {
services.gitlab-runner.enable = true;
sops.secrets."gitlab_runner_token".sopsFile = cfg.secretsFile;
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"
];
};
};
}
+23 -5
View File
@@ -1,17 +1,19 @@
{ {
lib,
appimageTools, appimageTools,
fetchurl, fetchurl,
libgdiplus, libgdiplus,
}: let }: let
pname = "smath-studio"; pname = "smath-studio";
version = "1.3.0.9126"; version = "1.5.0.9678";
src = fetchurl { src = fetchurl {
url = "https://smath.com/en-US/files/Download/cqSek/SMathStudioDesktop.1_3_0_9126.x86_64.ubuntu-22_04.glibc2.35.AppImage"; # The code after /Download/ changes per release
hash = "sha256-4FpdFGPFaPDK6WWSJHVtxcC8auaNkGmHyUtbegij6cQ="; url = "https://smath.com/en-US/files/Download/c4zCE/SMathStudioDesktop.1_5_0_9678.x86_64.ubuntu-22_04.glibc2.35.AppImage";
hash = "sha256-6lnuRnhoH6E+jIZXSgb/Pz9wE9nVAbduDHrkKCKKH+Y=";
}; };
appimageContents = appimageTools.extractType2 { appimageContents = appimageTools.extract {
inherit pname version src; inherit pname version src;
}; };
in in
@@ -30,6 +32,22 @@ in
extraInstallCommands = '' extraInstallCommands = ''
install -m 444 -D ${appimageContents}/*.desktop -t $out/share/applications install -m 444 -D ${appimageContents}/*.desktop -t $out/share/applications
sed -i "s|^Exec=.*|Exec=smath-studio %U|" $out/share/applications/*.desktop sed -i "s|^Exec=.*|Exec=smath-studio %U|" $out/share/applications/*.desktop
cp -r ${appimageContents}/usr/share/icons $out/share
# Package icons into /apps directory
for icon in ${appimageContents}/usr/share/icons/hicolor/*/*.png; do
if [ -f "$icon" ]; then
size=$(basename $(dirname "$icon"))
install -m 444 -D "$icon" "$out/share/icons/hicolor/$size/apps/smath.png"
fi
done
''; '';
meta = with lib; {
description = "Tiny, powerful, free mathematical program with WYSIWYG editor and complete units of measurements support";
homepage = "https://smath.com/";
license = licenses.unfree; # SMath is freeware, but closed source
# maintainers = with maintainers; [frajul];
mainProgram = "smath-studio";
platforms = ["x86_64-linux"];
};
} }
+4 -3
View File
@@ -1,7 +1,8 @@
{ {
writeShellApplication, writeShellApplication,
xf86_input_wacom, xf86_input_wacom,
xorg, xwininfo,
xrandr,
xdotool, xdotool,
bc, bc,
}: }:
@@ -10,8 +11,8 @@ writeShellApplication {
runtimeInputs = [ runtimeInputs = [
xf86_input_wacom xf86_input_wacom
xorg.xwininfo xwininfo
xorg.xrandr xrandr
xdotool xdotool
bc bc
]; ];