Compare commits
312
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91c5379c9b | ||
|
|
3f685a78c3 | ||
|
|
30992acc2c | ||
|
|
2155d226ff | ||
|
|
7701d8e8c8 | ||
|
|
86be8033ce | ||
|
|
52c7509bb7 | ||
|
|
1786ba9062 | ||
|
|
eb7e5fd0cc | ||
|
|
af1c78bbe7 | ||
|
|
56dfe3b692 | ||
|
|
a5974585e2 | ||
|
|
e0c73eb642 | ||
|
|
0446de16a5 | ||
|
|
8b67f93967 | ||
|
|
bb53edd27b | ||
|
|
843fca49fe | ||
|
|
1aac2a487c | ||
|
|
3de7ac9f14 | ||
|
|
45c06680ce | ||
|
|
a8f4ad0a86 | ||
|
|
8e5fa83a3e | ||
|
|
71627c9e11 | ||
|
|
f9698ba7d3 | ||
|
|
95f4292270 | ||
|
|
4ce34f6031 | ||
|
|
ead5e73282 | ||
|
|
3c4d0bb61d | ||
|
|
561854558f | ||
|
|
134f9921e3 | ||
|
|
429bfa6a81 | ||
|
|
255ffad672 | ||
|
|
d5f0b24bbb | ||
|
|
bc63ba93ef | ||
|
|
d7727812ec | ||
|
|
d944de4611 | ||
|
|
2aeb811bdb | ||
|
|
d0dc9b12e5 | ||
|
|
f70623e865 | ||
|
|
a49524da88 | ||
|
|
d649aed4d6 | ||
|
|
3807472d1e | ||
|
|
1ed67f9cda | ||
|
|
6ab04b11d9 | ||
|
|
21069d519c | ||
|
|
013d308de8 | ||
|
|
b238cfe3f4 | ||
|
|
8d912625f5 | ||
|
|
861fad71f1 | ||
|
|
b847179625 | ||
|
|
e57d09e66b | ||
|
|
c49fe8e2d9 | ||
|
|
970bc466e3 | ||
|
|
949229f978 | ||
|
|
14a06588b6 | ||
|
|
da3e3d5f1b | ||
|
|
5e08f131c7 | ||
|
|
544f47abd0 | ||
|
|
af20072513 | ||
|
|
8759d71e1f | ||
|
|
3cc888b2a3 | ||
|
|
6cce8363f7 | ||
|
|
8340426ce2 | ||
|
|
58b2d7fda9 | ||
|
|
af77c702db | ||
|
|
5b56cfbf94 | ||
|
|
015f47f36a | ||
|
|
b4824d3b71 | ||
|
|
d5b711f10a | ||
|
|
4df37851d1 | ||
|
|
b6e2c6d0df | ||
|
|
121f79e048 | ||
|
|
e85156235c | ||
|
|
e89908b592 | ||
|
|
139402db48 | ||
|
|
0bbce5c85e | ||
|
|
3fd5c34aa1 | ||
|
|
a7df51dbb8 | ||
|
|
d89b8b51cc | ||
|
|
6c301d87fd | ||
|
|
4b6c84e63d | ||
|
|
59780f39d0 | ||
|
|
48d784a964 | ||
|
|
76ad137946 | ||
|
|
de081fe38f | ||
|
|
940ea05b3f | ||
|
|
107e86d533 | ||
|
|
db11705c44 | ||
|
|
6dca04621d | ||
|
|
00ef9ef193 | ||
|
|
d923423d52 | ||
|
|
9595f16689 | ||
|
|
77c9c87624 | ||
|
|
a5ebf46d0c | ||
|
|
1bd857c1ca | ||
|
|
de10839976 | ||
|
|
ae2995e972 | ||
|
|
f494e364e1 | ||
|
|
39cac2aedb | ||
|
|
3260c774ca | ||
|
|
daf0980eb9 | ||
|
|
c61f1f6741 | ||
|
|
99cc802565 | ||
|
|
4bc97efe7a | ||
|
|
6260c56bbd | ||
|
|
0b5d298bc4 | ||
|
|
f7ae712471 | ||
|
|
5601b1339c | ||
|
|
2b30fc1a4d | ||
|
|
cd0e4479f7 | ||
|
|
8ed9ed7b51 | ||
|
|
42be5edaf1 | ||
|
|
3040914409 | ||
|
|
c623efd959 | ||
|
|
002106286a | ||
|
|
0439a3a70c | ||
|
|
d7fd96b4ae | ||
|
|
1cc47bea5c | ||
|
|
2ddb17e9dd | ||
|
|
9de557705a | ||
|
|
27f2604ed4 | ||
|
|
c51feeac8a | ||
|
|
27154a2ad8 | ||
|
|
fc05eb7824 | ||
|
|
dab57c7754 | ||
|
|
2907927036 | ||
|
|
3945bc3204 | ||
|
|
f7a84f0531 | ||
|
|
327ceed460 | ||
|
|
0c1df548a2 | ||
|
|
948ac61d8b | ||
|
|
c0d6d4483d | ||
|
|
f6c123e3bf | ||
|
|
5ecb1594d1 | ||
|
|
8ce210ad1f | ||
|
|
2526cc4d63 | ||
|
|
59ecf03ecf | ||
|
|
7f6910098d | ||
|
|
1015048fc5 | ||
|
|
831f49e8bd | ||
|
|
8acb99770c | ||
|
|
7488da102e | ||
|
|
be5e9cce07 | ||
|
|
0eddfbef58 | ||
|
|
bdb85b6161 | ||
|
|
64392b695e | ||
|
|
8896788bfd | ||
|
|
eec600d1d0 | ||
|
|
b31791b9ef | ||
|
|
8de280d7e5 | ||
|
|
8c8a6121bc | ||
|
|
f1296e7675 | ||
|
|
ba56618049 | ||
|
|
349181f35b | ||
|
|
0b8b7564a1 | ||
|
|
54e0f94af5 | ||
|
|
977aa539a3 | ||
|
|
d56605e37a | ||
|
|
7d013c83bc | ||
|
|
d42f38531d | ||
|
|
af54219f5f | ||
|
|
b6f59055d8 | ||
|
|
cb990c0cd4 | ||
|
|
c896e02bf1 | ||
|
|
c1e031efa9 | ||
|
|
19f213ca8c | ||
|
|
a0ebb3f259 | ||
|
|
3a994a3b8d | ||
|
|
3b4c0e4a63 | ||
|
|
b15dd4ce86 | ||
|
|
db5514062c | ||
|
|
7b500ee994 | ||
|
|
07eb4664f9 | ||
|
|
872f80e92c | ||
|
|
562f873f97 | ||
|
|
2f5868fcca | ||
|
|
e1c1f6e104 | ||
|
|
3bdf73557b | ||
|
|
bb9988245a | ||
|
|
713f5bfe8c | ||
|
|
c26f4ccd9a | ||
|
|
d84bfd4628 | ||
|
|
fb6ac408e1 | ||
|
|
f01b079931 | ||
|
|
78990e6414 | ||
|
|
cef602d758 | ||
|
|
368e741211 | ||
|
|
fec13e08b9 | ||
|
|
a540ca622d | ||
|
|
7fb0bcdac0 | ||
|
|
b7726fce94 | ||
|
|
30c987bd9b | ||
|
|
539e9a0b8e | ||
|
|
1e4593ea17 | ||
|
|
ec8a71de95 | ||
|
|
0c39388b21 | ||
|
|
ebb043b589 | ||
|
|
fcfc9f6450 | ||
|
|
fe3cd057cd | ||
|
|
b9cdb9299e | ||
|
|
8b6ba76848 | ||
|
|
2e79bd9e00 | ||
|
|
cfdc9f7001 | ||
|
|
a12b50edfa | ||
|
|
194d4bcec0 | ||
|
|
5badb000be | ||
|
|
08b3f2c194 | ||
|
|
5f9a110464 | ||
|
|
bcd041484d | ||
|
|
fd3b9f20f0 | ||
|
|
bc160af26a | ||
|
|
a34abd0f05 | ||
|
|
2fd1f5ee53 | ||
|
|
88547dc82c | ||
|
|
ccf38c2da2 | ||
|
|
b1107ae904 | ||
|
|
48f53b3884 | ||
|
|
9bcca96597 | ||
|
|
78e219a6cb | ||
|
|
8b958d6a56 | ||
|
|
1a1aa20690 | ||
|
|
54952923f3 | ||
|
|
ca20fa6c35 | ||
|
|
c1b2b51d13 | ||
|
|
28f78bb67e | ||
|
|
114647aa96 | ||
|
|
64ae389f27 | ||
|
|
fd39dbfcd4 | ||
|
|
b13cca7173 | ||
|
|
7807091b83 | ||
|
|
d3026afb97 | ||
|
|
152daf1230 | ||
|
|
ffda398f8d | ||
|
|
3e179960de | ||
|
|
93e655ed27 | ||
|
|
710c1dedb8 | ||
|
|
28ec5c73d4 | ||
|
|
fc7285bd5c | ||
|
|
11ee156b29 | ||
|
|
2dba549787 | ||
|
|
d28c7d870c | ||
|
|
8bf17e74ef | ||
|
|
08cf457aa3 | ||
|
|
448002ebf4 | ||
|
|
9735d3f0c0 | ||
|
|
8f1b0ade4d | ||
|
|
db05024dc6 | ||
|
|
21053dac8c | ||
|
|
1ab0bf54fa | ||
|
|
5070d4dbfc | ||
|
|
12466b4426 | ||
|
|
23155d57b7 | ||
|
|
a9e30bd84b | ||
|
|
e62f6e9dce | ||
|
|
c543bc13ea | ||
|
|
b4d1681b99 | ||
|
|
6c32ffbe94 | ||
|
|
6787243414 | ||
|
|
d350807e8c | ||
|
|
f872c8db0c | ||
|
|
8c53c66c4d | ||
|
|
0f07029660 | ||
|
|
8010d771a1 | ||
|
|
7f4c41429e | ||
|
|
6d21fe4262 | ||
|
|
c081f95aaf | ||
|
|
452a34c7e8 | ||
|
|
15c4616b91 | ||
|
|
07274a0364 | ||
|
|
3bb8db1349 | ||
|
|
65a3dcdc08 | ||
|
|
9fe40bfd13 | ||
|
|
07943d4f95 | ||
|
|
815a79ff41 | ||
|
|
32ddceba8f | ||
|
|
55ba4125d6 | ||
|
|
b9274f546f | ||
|
|
fd246d7daf | ||
|
|
edae0d2bb0 | ||
|
|
1cb23dd0a4 | ||
|
|
ab1052193a | ||
|
|
6dadb2008c | ||
|
|
18f9cc3fa8 | ||
|
|
9295ad7010 | ||
|
|
e3cf2379ab | ||
|
|
f6c3f676b2 | ||
|
|
d57017382a | ||
|
|
1d7690eab4 | ||
|
|
67d68a9946 | ||
|
|
9af362b5c8 | ||
|
|
a0ae09452f | ||
|
|
711859e660 | ||
|
|
1c1e496425 | ||
|
|
97229a521f | ||
|
|
7d8190210b | ||
|
|
a1dfeff98b | ||
|
|
9e512c2863 | ||
|
|
136653b0fa | ||
|
|
75fb0f54ec | ||
|
|
a3282f3eb3 | ||
|
|
843dfb986d | ||
|
|
3eba0fe092 | ||
|
|
fdc8b03d9b | ||
|
|
d86321cfe6 | ||
|
|
881c930fdb | ||
|
|
dc3f9fe681 | ||
|
|
d73ff17327 | ||
|
|
67468ba6fa | ||
|
|
6d2a7f50df | ||
|
|
3cf8f19fcc | ||
|
|
d335f6c892 | ||
|
|
8d94428f77 |
@@ -1,61 +0,0 @@
|
||||
[helpers]
|
||||
|
||||
[default]
|
||||
depends = []
|
||||
|
||||
[manjaro.files]
|
||||
manjaro = "~"
|
||||
|
||||
[mc.files]
|
||||
mc = "~/.config/mc"
|
||||
|
||||
[vim.files]
|
||||
# type symbolic prevents interpreting '{{' as template
|
||||
"vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" }
|
||||
|
||||
[nvim.files]
|
||||
"vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" }
|
||||
|
||||
[i3.files]
|
||||
"i3/i3" = "~/.config/i3"
|
||||
"i3/i3blocks" = { target = "~/.config/i3blocks", type = "symbolic" }
|
||||
"i3/rofi" = "~/.config/rofi"
|
||||
"i3/i3-scrot.conf" = "~/.config/i3-scrot.conf"
|
||||
"i3/i3status-rust" = "~/.config/i3status-rust"
|
||||
"i3/.profile" = "~/.profile"
|
||||
|
||||
[i3.variables]
|
||||
monitor-primary = "not-specified"
|
||||
monitor-secondary = "not-specified"
|
||||
screenlayout-script = "echo screenlayout-script not specified"
|
||||
bar-font-size = 15
|
||||
tray-output = "tray_output primary"
|
||||
|
||||
[emacs.files]
|
||||
"emacs/doom" = "~/.config/doom"
|
||||
# "emacs/spacemacs/.spacemacs" = "~/.spacemacs"
|
||||
# "emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el"
|
||||
|
||||
[alacritty.files]
|
||||
alacritty = "~/.config/alacritty"
|
||||
|
||||
[starship.files]
|
||||
starship = "~/.config/"
|
||||
|
||||
[zsh.files]
|
||||
"zsh/.zshrc" = "~/.zshrc"
|
||||
"zsh/custom-plugins" = "~/.oh-my-zsh/custom"
|
||||
|
||||
[polybar.files]
|
||||
polybar = "~/.config/polybar"
|
||||
|
||||
[leftwm.files]
|
||||
leftwm = "~/.config/leftwm"
|
||||
|
||||
[xmonad.files]
|
||||
xmonad = "~/.xmonad"
|
||||
|
||||
[nix.files]
|
||||
"direnvrc" = "~/.config/direnv/direnvrc"
|
||||
"nix/configuration.nix" = "/etc/nixos/configuration.nix"
|
||||
"nix/flake.nix" = "/etc/nixos/flake.nix"
|
||||
@@ -1,6 +0,0 @@
|
||||
[i3.variables]
|
||||
monitor-primary = "DVI-D-0"
|
||||
monitor-secondary = "DVI-D-1"
|
||||
screenlayout-script = "~/.screenlayout/2desktop-dvi.sh"
|
||||
bar-font-size = 15
|
||||
tray-output = "tray_output DVI-D-1"
|
||||
@@ -1,4 +0,0 @@
|
||||
[i3.variables]
|
||||
monitor-primary = "HDMI-1"
|
||||
monitor-secondary = "eDP-1"
|
||||
screenlayout-script = "~/.screenlayout/laptop-at-home.sh"
|
||||
@@ -1,5 +0,0 @@
|
||||
[i3.variables]
|
||||
monitor-primary = "HDMI-1"
|
||||
monitor-secondary = "eDP-1"
|
||||
tray-output = "tray_output eDP-1"
|
||||
screenlayout-script = "$scripts/display-layoutpicker"
|
||||
@@ -1,2 +0,0 @@
|
||||
includes = [".dotter/kardorf.toml"]
|
||||
packages = ["i3", "emacs", "alacritty", "zsh", "starship", "nix"]
|
||||
@@ -1,2 +0,0 @@
|
||||
includes = [".dotter/laptop.toml"]
|
||||
packages = []
|
||||
@@ -25,6 +25,7 @@ jobs:
|
||||
- name: Rebase from master branch
|
||||
shell: bash
|
||||
run: |
|
||||
git fetch origin master
|
||||
commits_ahead=$(git rev-list --count HEAD..origin/master)
|
||||
echo "Commits ahead: $commits_ahead"
|
||||
git log --oneline -5
|
||||
|
||||
+8
-6
@@ -1,15 +1,16 @@
|
||||
keys:
|
||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||
- &builder-ssh age1vwanu6jm80jzwe78jzz7z9vuzlg94tl7rpdg34vjmxcrnhddxu9q5zaf49
|
||||
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
|
||||
creation_rules:
|
||||
- path_regex: hosts/common/secrets.yaml$
|
||||
- path_regex: hosts/secrets-common.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *aspi-ssh
|
||||
- *pianonix-ssh
|
||||
- *kardorf-ssh
|
||||
|
||||
- path_regex: hosts/builder/secrets.yaml$
|
||||
key_groups:
|
||||
@@ -17,8 +18,9 @@ creation_rules:
|
||||
- *primary
|
||||
- *builder-ssh
|
||||
|
||||
- path_regex: hosts/pianonix/secrets.yaml$
|
||||
- path_regex: features-nixos/optional/k9s/kubeconfig.secret.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *pianonix-ssh
|
||||
- *aspi-ssh
|
||||
- *kardorf-ssh
|
||||
|
||||
+16
-3
@@ -1,7 +1,12 @@
|
||||
#+title: My dotfiles
|
||||
|
||||
My dotfiles for which I am using =nix=.
|
||||
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]]
|
||||
* Quick start for home-manger only (no need to pull this repo)
|
||||
- Install nix using the https://github.com/DeterminateSystems/nix-installer
|
||||
- Then run
|
||||
#+begin_src shell
|
||||
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
|
||||
#+end_src
|
||||
- Done
|
||||
|
||||
* Machine selection
|
||||
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
||||
@@ -24,10 +29,18 @@ sops edit secrets/secrets.yaml
|
||||
** Authorize new device
|
||||
- Generate public key from ssh -> Private age key generation not needed
|
||||
#+begin_src sh
|
||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key
|
||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
|
||||
#+end_src
|
||||
- Add age public key to file:.sops.yaml
|
||||
- Update keys
|
||||
#+begin_src sh
|
||||
sops updatekeys secrets/*
|
||||
#+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
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
system.hydraAutoUpgrade = {
|
||||
# Only enable if not dirty
|
||||
enable = inputs.self ? rev;
|
||||
dates = "*:0/10"; # Every 10 minutes
|
||||
instance = "http://hydra.julian-mutter.de";
|
||||
project = "dotfiles";
|
||||
jobset = "main";
|
||||
job = "hosts.${config.networking.hostName}";
|
||||
oldFlakeRef = "self";
|
||||
};
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
{
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports =
|
||||
@@ -11,6 +13,7 @@
|
||||
./nix.nix
|
||||
./sops.nix
|
||||
./root.nix
|
||||
./stylix.nix
|
||||
]
|
||||
++ [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
@@ -22,13 +25,23 @@
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
|
||||
# Networking
|
||||
networking.networkmanager.enable = true;
|
||||
services.resolved.enable = true;
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
plugins = with pkgs; [
|
||||
networkmanager-openconnect
|
||||
];
|
||||
};
|
||||
services.resolved.enable = false;
|
||||
# MDNS Taken by avahi
|
||||
# networking.networkmanager.dns = "none";
|
||||
networking.nameservers = lib.mkDefault [
|
||||
"1.1.1.1"
|
||||
"8.8.8.8"
|
||||
];
|
||||
|
||||
programs.dconf.enable = true;
|
||||
|
||||
# HM
|
||||
home-manager.useGlobalPkgs = true;
|
||||
# HM module
|
||||
home-manager.useGlobalPkgs = true; # hm module uses the pkgs of the nixos config
|
||||
home-manager.backupFileExtension = "hm-backup"; # backup conflicting files. So hm activation never fails
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
{pkgs, ...}: {
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "de_DE.UTF-8";
|
||||
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||
LC_MONETARY = "de_DE.UTF-8";
|
||||
LC_NAME = "de_DE.UTF-8";
|
||||
LC_NUMERIC = "en_US.UTF-8";
|
||||
LC_PAPER = "de_DE.UTF-8";
|
||||
LC_TELEPHONE = "de_DE.UTF-8";
|
||||
LC_TIME = "en_GB.UTF-8"; # english weekdays, but 24h format
|
||||
};
|
||||
|
||||
# Keymap
|
||||
services.xserver.xkb = {
|
||||
layout = "de";
|
||||
variant = "";
|
||||
};
|
||||
|
||||
console.keyMap = "de";
|
||||
|
||||
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,13 +1,9 @@
|
||||
{
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
{outputs, ...}: {
|
||||
# Apply overlays
|
||||
nixpkgs = {
|
||||
# TODO: apply this to hm and nixos without duplicate code
|
||||
overlays = builtins.attrValues outputs.overlays;
|
||||
config = {
|
||||
nvidia.acceptLicense = true;
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = _: true; # TODO: what is this
|
||||
warn-dirty = false;
|
||||
@@ -17,7 +13,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
nix.settings.auto-optimise-store = lib.mkDefault true;
|
||||
# optimize at every build, slows down builds
|
||||
# better to do optimise.automatic for regular optimising
|
||||
# nix.settings.auto-optimise-store = lib.mkDefault true;
|
||||
nix.settings.experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
@@ -25,31 +23,16 @@
|
||||
];
|
||||
# warn-dirty = false;
|
||||
|
||||
# Setup binary caches
|
||||
nix.settings = {
|
||||
substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"http://binarycache.julian-mutter.de"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
"root"
|
||||
"@wheel"
|
||||
]; # needed for devenv to add custom caches
|
||||
};
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
# Keep the last 3 generations
|
||||
options = "--delete-older-than +3";
|
||||
options = "--delete-older-than 30d";
|
||||
persistent = true;
|
||||
};
|
||||
nix.optimise = {
|
||||
automatic = true;
|
||||
dates = ["weekly"]; # Optional; allows customizing optimisation schedule
|
||||
persistent = true;
|
||||
};
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
pwd,
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
@@ -13,10 +14,10 @@ in {
|
||||
sshKeyPaths = map getKeyPath keys;
|
||||
|
||||
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
|
||||
keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||
# keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||
# Generate key if none of the above worked. With this, building will still work, just without secrets
|
||||
generateKey = true;
|
||||
generateKey = false; # TODO: building should not work without secrets!?
|
||||
};
|
||||
|
||||
sops.defaultSopsFile = ../secrets.yaml;
|
||||
sops.defaultSopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
}
|
||||
+8
-2
@@ -1,8 +1,14 @@
|
||||
{pkgs, ...}: {
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
# Make programs like nextcloud client access saved passwords
|
||||
programs.seahorse.enable = true;
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
|
||||
programs.seahorse.enable = true;
|
||||
programs.ssh.askPassword = lib.mkForce "${pkgs.seahorse}/libexec/seahorse/ssh-askpass"; # Solve conflicting definition in seahorse and plasma6
|
||||
|
||||
# Make authentication work for e.g. gparted
|
||||
security.polkit.enable = true;
|
||||
systemd = {
|
||||
@@ -3,7 +3,10 @@
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
nssmdns6 = true;
|
||||
publish.enable = true;
|
||||
publish.addresses = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
# Setup binary caches
|
||||
nix.settings = {
|
||||
substituters = [
|
||||
# high priority since it's almost always used
|
||||
"https://cache.nixos.org?priority=10"
|
||||
|
||||
"https://nix-community.cachix.org"
|
||||
"https://hyprland.cachix.org"
|
||||
# "http://binarycache.julian-mutter.de"
|
||||
"https://devenv.cachix.org"
|
||||
"https://noctalia.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:7RB4Sif4WQU76XWIsRJ2KtKa45zg1QOTHEkUhi/JBe8="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
"noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
"root"
|
||||
"@wheel"
|
||||
]; # needed for devenv to add custom caches
|
||||
|
||||
# Ensure we can still build when missing-server is not accessible
|
||||
fallback = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
users.extraUsers.greeter = {
|
||||
# For caching
|
||||
home = "/tmp/greeter-home";
|
||||
createHome = true;
|
||||
};
|
||||
|
||||
programs.regreet = {
|
||||
enable = true;
|
||||
cageArgs = [
|
||||
"-s"
|
||||
"-m"
|
||||
"last"
|
||||
]; # multimonitor use last monitor
|
||||
};
|
||||
}
|
||||
@@ -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;"
|
||||
# ;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -13,9 +13,9 @@ in {
|
||||
PasswordAuthentication = false;
|
||||
PermitRootLogin = "no";
|
||||
|
||||
# TODO: what does this d
|
||||
# TODO: what does this do
|
||||
# Let WAYLAND_DISPLAY be forwarded
|
||||
AcceptEnv = "WAYLAND_DISPLAY";
|
||||
# AcceptEnv = "WAYLAND_DISPLAY";
|
||||
X11Forwarding = true;
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ in {
|
||||
# publicKeyFile = ../../${hostname}/ssh_host_ed25519_key.pub;
|
||||
# extraHostNames =
|
||||
# [
|
||||
# "${hostname}.m7.rs"
|
||||
# # "${hostname}.m7.rs"
|
||||
# ]
|
||||
# ++
|
||||
# # Alias for localhost if it's the same host
|
||||
@@ -1,7 +1,7 @@
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
shared-mime-info # extended mimetype support
|
||||
lxde.lxmenu-data # open with "Installed Applications"
|
||||
lxmenu-data # open with "Installed Applications"
|
||||
pcmanfm
|
||||
];
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
services.pulseaudio.enable = false;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
wireplumber.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
@@ -14,6 +15,14 @@
|
||||
"module.x11.bell" = false;
|
||||
};
|
||||
};
|
||||
"10-increase-buffer" = {
|
||||
"context.properties" = {
|
||||
"default.clock.rate" = 48000;
|
||||
"default.clock.quantum" = 1024;
|
||||
"default.clock.min-quantum" = 1024;
|
||||
"default.clock.max-quantum" = 2048;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
};
|
||||
comu = {
|
||||
configFile = "/etc/wireguard/comu.conf";
|
||||
autostart = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
dumpcap.enable = true;
|
||||
usbmon.enable = true;
|
||||
};
|
||||
|
||||
users.users.julian.extraGroups = ["wireshark"];
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
pwd,
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
@@ -17,18 +18,22 @@ in {
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"audio"
|
||||
"realtime"
|
||||
"rtkit"
|
||||
"network"
|
||||
"video"
|
||||
"podman"
|
||||
"docker"
|
||||
"git"
|
||||
"gamemode"
|
||||
"dialout"
|
||||
];
|
||||
|
||||
openssh.authorizedKeys.keys = lib.splitString "\n" (
|
||||
builtins.readFile ../../../../homes/julian/ssh.pub
|
||||
builtins.readFile ./ssh.pub
|
||||
);
|
||||
hashedPasswordFile = config.sops.secrets.julian-password.path;
|
||||
# hashedPasswordFile = config.sops.secrets.julian-password.path;
|
||||
hashedPassword = "$y$j9T$N33kLJQbV8soUoCbDkpwA1$r/yahJDgOPo4GGOrAi6BUG5zLTzmaBrA5NQ4nno561A";
|
||||
packages = [pkgs.home-manager];
|
||||
};
|
||||
users.groups.julian = {
|
||||
@@ -36,11 +41,11 @@ in {
|
||||
};
|
||||
|
||||
sops.secrets.julian-password = {
|
||||
sopsFile = ../../secrets.yaml;
|
||||
sopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||
neededForUsers = true;
|
||||
};
|
||||
|
||||
home-manager.users.julian = import ../../../../homes/julian/${config.networking.hostName}.nix;
|
||||
home-manager.users.julian = import "${pwd}/homes/julian/${config.networking.hostName}.nix";
|
||||
|
||||
security.pam.services.swaylock = {}; # Make swaylock unlocking work
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
|
||||
in {
|
||||
users.mutableUsers = false;
|
||||
users.users.wolfi = {
|
||||
description = "Wolfi";
|
||||
group = "wolfi";
|
||||
isNormalUser = true;
|
||||
shell = pkgs.fish;
|
||||
extraGroups = ifTheyExist [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"audio"
|
||||
"network"
|
||||
"video"
|
||||
"podman"
|
||||
"docker"
|
||||
"git"
|
||||
"gamemode"
|
||||
];
|
||||
|
||||
hashedPassword = "$y$j9T$ifzWjoZaRtPUOOfMYnbJ20$uFOO1EyDApL52vRUicZYgupaTA/a6sGNUj3imZ/lcb6";
|
||||
packages = [pkgs.home-manager];
|
||||
};
|
||||
users.groups.wolfi = {};
|
||||
}
|
||||
Generated
+1110
-142
File diff suppressed because it is too large
Load Diff
@@ -2,16 +2,40 @@
|
||||
description = "Home Manager configuration of julian";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
|
||||
systems.url = "github:nix-systems/default-linux";
|
||||
nixos-hardware.url = "github:nixos/nixos-hardware";
|
||||
impermanence.url = "github:nix-community/impermanence";
|
||||
nix-colors.url = "github:misterio77/nix-colors";
|
||||
deploy-rs.url = "github:serokell/deploy-rs";
|
||||
|
||||
# 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 = {
|
||||
url = "github:nix-community/nixos-generators";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
vortix = {
|
||||
url = "github:Harry-kp/vortix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
url = "github:nix-community/home-manager/release-26.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sops-nix = {
|
||||
@@ -28,17 +52,12 @@
|
||||
};
|
||||
|
||||
# Various flakes
|
||||
alacritty-theme = {
|
||||
url = "github:alacritty/alacritty-theme";
|
||||
flake = false;
|
||||
};
|
||||
yazi-flavors = {
|
||||
url = "github:yazi-rs/flavors";
|
||||
flake = false;
|
||||
};
|
||||
nixvim = {
|
||||
url = "github:nix-community/nixvim";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
url = "github:nix-community/nixvim/nixos-26.05";
|
||||
};
|
||||
nix-matlab = {
|
||||
url = "gitlab:doronbehar/nix-matlab";
|
||||
@@ -71,10 +90,6 @@
|
||||
import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
config.permittedInsecurePackages = [
|
||||
"olm-3.2.16"
|
||||
];
|
||||
warn-dirty = false;
|
||||
}
|
||||
);
|
||||
in {
|
||||
@@ -84,93 +99,66 @@
|
||||
homeManagerModules = import ./modules/home-manager;
|
||||
|
||||
overlays = import ./overlays {inherit inputs outputs;};
|
||||
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
|
||||
|
||||
packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;});
|
||||
packages = forEachSystem (pkgs: import ./packages {inherit pkgs;});
|
||||
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
|
||||
formatter = forEachSystem (pkgs: pkgs.alejandra);
|
||||
formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt *
|
||||
|
||||
nixosConfigurations = {
|
||||
# Main laptop
|
||||
aspi = lib.nixosSystem {
|
||||
modules = [./hosts/aspi];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
# Piano raspberry pi
|
||||
pianonix = lib.nixosSystem {
|
||||
modules = [./hosts/pianonix];
|
||||
modules = [
|
||||
./hosts/aspi
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
kardorf = lib.nixosSystem {
|
||||
modules = [./hosts/pianonix];
|
||||
modules = [./hosts/kardorf];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
builder = lib.nixosSystem {
|
||||
modules = [./hosts/builder];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Standalone HM
|
||||
homeConfigurations = {
|
||||
# Main laptop
|
||||
"julian@aspi" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/aspi.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
# Media server (RPi)
|
||||
"julian@pianonix" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/pianonix.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.aarch64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
"julian@kardorf" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/kardorf.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.aarch64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
"julian@v3ms" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/v3ms
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.aarch64-linux;
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
"julian@quickstart" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/quickstart.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# deploy-rs node configuration
|
||||
deploy.nodes = {
|
||||
pianonix = {
|
||||
hostname = "pianonix.local";
|
||||
profiles.system = {
|
||||
sshUser = "root";
|
||||
user = "root";
|
||||
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
|
||||
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
|
||||
};
|
||||
};
|
||||
|
||||
builder = {
|
||||
hostname = "builder.julian-mutter.de";
|
||||
profiles.system = {
|
||||
|
||||
+36
-2
@@ -6,10 +6,13 @@
|
||||
./features/direnv
|
||||
./features/topgrade
|
||||
./features/neovim
|
||||
./features/kitty
|
||||
./features/ghostty
|
||||
./features/wezterm
|
||||
./features/alacritty
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
./features/tmux
|
||||
./features/qt-distrobox
|
||||
|
||||
./features/hyprland
|
||||
|
||||
@@ -20,5 +23,36 @@
|
||||
|
||||
hostName = "aspi";
|
||||
is-nixos = true;
|
||||
terminal = "kitty";
|
||||
terminal = "alacritty";
|
||||
|
||||
# ------- ----------
|
||||
# | eDP-1 | | HDMI-A-1 |
|
||||
# ------- ----------
|
||||
monitors = [
|
||||
{
|
||||
name = "HDMI-A-1";
|
||||
# width = 1680;
|
||||
# height = 1050;
|
||||
workspaces = [
|
||||
"1"
|
||||
"2"
|
||||
"3"
|
||||
"4"
|
||||
"5"
|
||||
];
|
||||
primary = true;
|
||||
}
|
||||
{
|
||||
name = "eDP-1";
|
||||
# width = 1680;
|
||||
# height = 1050;
|
||||
workspaces = [
|
||||
"6"
|
||||
"7"
|
||||
"8"
|
||||
"9"
|
||||
"10"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import = [
|
||||
"~/.config/alacritty/theme/themes/smoooooth.toml"
|
||||
]
|
||||
@@ -1,15 +1,12 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [alacritty];
|
||||
|
||||
home.file = {
|
||||
".config/alacritty/theme".source = "${inputs.alacritty-theme}";
|
||||
".config/alacritty/alacritty.toml".source = ./alacritty.toml;
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {};
|
||||
theme = "smoooooth";
|
||||
};
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
mise.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ in {
|
||||
sqlite
|
||||
|
||||
# Code formatters for use with doom emacs
|
||||
nixfmt-rfc-style # nix
|
||||
nixfmt # nix
|
||||
alejandra # nix
|
||||
|
||||
nixd # nix lsp
|
||||
@@ -52,6 +52,14 @@ in {
|
||||
shfmt
|
||||
pyright
|
||||
clang-tools # c++ lsp etc
|
||||
ccls # alternative c++ lsp
|
||||
cmake
|
||||
bear
|
||||
cmake-language-server
|
||||
|
||||
# qt6.full # qt tools and libs including lsp
|
||||
tinymist # typst lsp
|
||||
|
||||
ltex-ls # latex languagetool
|
||||
|
||||
graphviz
|
||||
@@ -59,6 +67,27 @@ in {
|
||||
# neocmakelsp # cmake
|
||||
|
||||
emacs-all-the-icons-fonts
|
||||
# frajul.typst-languagetool
|
||||
ltex-ls-plus
|
||||
|
||||
(texlive.combine {
|
||||
inherit
|
||||
(texlive)
|
||||
scheme-basic
|
||||
# for rendering latex in inkscape
|
||||
standalone
|
||||
amsmath
|
||||
preview
|
||||
# needed for org mode preview
|
||||
dvisvgm
|
||||
dvipng # for preview and export as html
|
||||
wrapfig
|
||||
# amsmath
|
||||
ulem
|
||||
hyperref
|
||||
capt-of
|
||||
;
|
||||
})
|
||||
]
|
||||
++ lib.optional config.is-nixos emacs;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}:
|
||||
with lib; {
|
||||
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;
|
||||
};
|
||||
|
||||
@@ -27,6 +27,35 @@ with lib; {
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
programs.zoxide = {
|
||||
enable = 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 = {
|
||||
enable = true;
|
||||
|
||||
@@ -38,14 +67,32 @@ with lib; {
|
||||
cd $argv
|
||||
'';
|
||||
run = ''
|
||||
nix run 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 = ''
|
||||
set args
|
||||
for arg in $argv
|
||||
set args $args nixpkgs#$arg
|
||||
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 shell $args
|
||||
|
||||
set -l packages
|
||||
for arg in $argv
|
||||
set -a packages $channel#$arg
|
||||
end
|
||||
|
||||
nix shell --impure $packages
|
||||
'';
|
||||
fish_user_key_bindings = ''
|
||||
bind ctrl-space 'zi; commandline -f repaint'
|
||||
bind -M insert ctrl-space 'zi; commandline -f repaint'
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib; {
|
||||
fonts.fontconfig.enable = true; # required to autoload fonts from packages
|
||||
home.packages = with pkgs; [
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.jetbrains-mono
|
||||
|
||||
font-awesome
|
||||
dejavu_fonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
source-code-pro
|
||||
source-sans
|
||||
roboto
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
# theme = "catppuccin-mocha";
|
||||
font-size = 12;
|
||||
};
|
||||
};
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "ghostty") "ghostty";
|
||||
}
|
||||
@@ -1,31 +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-BigSur";
|
||||
size = 24;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -4,27 +4,22 @@
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
}: {
|
||||
imports = [
|
||||
# inputs.hyprland.homeManagerModules.default
|
||||
./waybar
|
||||
./wofi
|
||||
./mako
|
||||
# ./waybar
|
||||
# ./wofi
|
||||
# ./mako
|
||||
# ./hyprlock
|
||||
./wlogout
|
||||
../gammastep
|
||||
# ../gammastep
|
||||
|
||||
./swayidle.nix
|
||||
# ./swayidle.nix
|
||||
./swaylock.nix
|
||||
./zathura.nix
|
||||
./waypipe.nix
|
||||
|
||||
./hyprbars.nix
|
||||
# ./hyprbars.nix
|
||||
inputs.noctalia.homeModules.default # Use for latest version from inputs
|
||||
];
|
||||
|
||||
xdg.portal = {
|
||||
@@ -37,18 +32,52 @@ 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; [
|
||||
# hyprpicker # TODO
|
||||
# hyprcursor # TODO
|
||||
hyprpicker
|
||||
hyprcursor
|
||||
brightnessctl
|
||||
# grimblast
|
||||
playerctl
|
||||
frajul.hyprshot-gui
|
||||
frajul.wl-ocr
|
||||
|
||||
wf-recorder
|
||||
wl-clipboard
|
||||
|
||||
(pkgs.writeShellScriptBin "toggle-screen-mirroring"
|
||||
(
|
||||
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" (
|
||||
lib.concatStringsSep "\n" (
|
||||
builtins.concatLists (
|
||||
map (
|
||||
monitor:
|
||||
map (ws: "hyprctl dispatch 'hl.dsp.workspace.move({workspace=\"${ws}\", monitor=\"${monitor.name}\"})'") monitor.workspaces
|
||||
)
|
||||
config.monitors
|
||||
)
|
||||
)
|
||||
))
|
||||
];
|
||||
|
||||
services.cliphist = {
|
||||
@@ -59,51 +88,48 @@ in {
|
||||
MOZ_ENABLE_WAYLAND = 1;
|
||||
QT_QPA_PLATFORM = "wayland";
|
||||
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;
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
# Whether to enable Hyprland wayland compositor
|
||||
enable = true;
|
||||
# package = config.lib.nixGL.wrap (
|
||||
# pkgs.hyprland.override {
|
||||
# # nixgl needed?
|
||||
# wrapRuntimeDeps = false;
|
||||
# }
|
||||
# );
|
||||
|
||||
configType = "lua";
|
||||
extraConfig =
|
||||
# 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 = {
|
||||
enable = true;
|
||||
@@ -120,272 +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;
|
||||
|
||||
# Optional
|
||||
# Whether to enable hyprland-session.target on hyprland startup
|
||||
# systemd.enable = true;
|
||||
# Make PATH available to systemd services
|
||||
# systemd.variables = [ "--all" ];
|
||||
|
||||
plugins = [
|
||||
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
|
||||
# hyprlandPlugins.hyprbars
|
||||
];
|
||||
|
||||
settings = {
|
||||
"$mod" = "SUPER";
|
||||
|
||||
# Monitors
|
||||
monitor = ",preferred,auto,auto";
|
||||
|
||||
# Autostart
|
||||
exec-once = ["firefox"];
|
||||
|
||||
# Look and Feel
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 5;
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
# "col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
|
||||
# "col.inactive_border" = "0xff${palette.base00}";
|
||||
};
|
||||
|
||||
decoration = {
|
||||
# power saving
|
||||
blur.enabled = false;
|
||||
# power saving
|
||||
shadow.enabled = false;
|
||||
};
|
||||
|
||||
# Dwindle layout
|
||||
dwindle = {
|
||||
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true; # You probably want this
|
||||
smart_split = false;
|
||||
smart_resizing = false;
|
||||
force_split = 2;
|
||||
# no_gaps_when_only = 2; # with border
|
||||
};
|
||||
|
||||
# Master layout
|
||||
master = {
|
||||
new_status = "slave";
|
||||
# no_gaps_when_only = 2; # with border
|
||||
mfact = 0.5; # Do not make master bigger
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = true;
|
||||
|
||||
animation = [
|
||||
"windows,1,3,default,slide"
|
||||
"fade,1,3,default"
|
||||
"layers,1,3,default,slide"
|
||||
"border,1,3,default"
|
||||
"workspaces,1,3,default,slide"
|
||||
];
|
||||
};
|
||||
|
||||
exec = [
|
||||
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
|
||||
];
|
||||
|
||||
misc = {
|
||||
# disable auto polling for config file changes
|
||||
disable_autoreload = true;
|
||||
|
||||
force_default_wallpaper = 0;
|
||||
|
||||
vfr = true; # power saving
|
||||
};
|
||||
|
||||
render = {
|
||||
# we do, in fact, want direct scanout
|
||||
direct_scanout = true;
|
||||
};
|
||||
|
||||
# Input
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
natural_scroll = false;
|
||||
follow_mouse = 1;
|
||||
};
|
||||
|
||||
# Window rules
|
||||
windowrulev2 = [
|
||||
"suppressevent maximize, class:.*"
|
||||
"workspace 1, class:firefox"
|
||||
"workspace 9, class:nheko"
|
||||
"workspace 9, class:org.telegram.desktop"
|
||||
"workspace 10, class:thunderbird"
|
||||
"float, class:qalculate-gtk"
|
||||
"tile, class:MATLAB, title:MATLAB"
|
||||
];
|
||||
|
||||
# Workspace rules
|
||||
workspace = [
|
||||
"1, monitor:HDMI-A-1"
|
||||
"2, monitor:HDMI-A-1"
|
||||
"3, monitor:HDMI-A-1"
|
||||
"4, monitor:HDMI-A-1"
|
||||
"5, monitor:HDMI-A-1"
|
||||
"6, monitor:eDP-1"
|
||||
"7, monitor:eDP-1"
|
||||
"8, monitor:eDP-1"
|
||||
"9, monitor:eDP-1"
|
||||
"10, monitor:eDP-1"
|
||||
|
||||
# smart gaps (none when only one window in workspace)
|
||||
"w[t1], gapsin:0, gapsout:0, border:1"
|
||||
"w[tg1], gapsin:0, gapsout:0, border:1"
|
||||
"f[1], gapsin:0, gapsout:0, border:1"
|
||||
];
|
||||
|
||||
# Mouse binds
|
||||
bindm = [
|
||||
"$mod, mouse:272, movewindow" # leftclick
|
||||
"$mod, mouse:273, resizewindow" # rightclick
|
||||
];
|
||||
|
||||
# binds
|
||||
bind =
|
||||
[
|
||||
# compositor commands
|
||||
"$mod, Space, focuswindow, floating"
|
||||
"$mod SHIFT, Space, togglefloating,"
|
||||
"$mod, F, fullscreen,"
|
||||
"$mod, X, killactive,"
|
||||
|
||||
"$mod, O, togglesplit," # dwindle
|
||||
|
||||
# opening applications
|
||||
"$mod, D, exec, wofi --show drun,run"
|
||||
"$mod, E, exec, pcmanfm"
|
||||
"$mod, Return, exec, kitty"
|
||||
"$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"
|
||||
", Print, exec, hyprshot-gui"
|
||||
|
||||
# "$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" ];
|
||||
# };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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.settings = {
|
||||
general = {
|
||||
@@ -19,15 +7,6 @@ in {
|
||||
ignore_empty_input = true;
|
||||
};
|
||||
|
||||
background = [
|
||||
{
|
||||
color = "#${palette.base00}";
|
||||
# path = "screenshot";
|
||||
# blur_passes = 3;
|
||||
# blur_size = 8;
|
||||
}
|
||||
];
|
||||
|
||||
input-field = [
|
||||
{
|
||||
size = "200, 50";
|
||||
@@ -35,9 +14,6 @@ in {
|
||||
monitor = "";
|
||||
dots_center = true;
|
||||
fade_on_empty = false;
|
||||
font_color = "#${palette.base0B}";
|
||||
inner_color = "#${palette.base01}";
|
||||
outer_color = "#${palette.base05}";
|
||||
outline_thickness = 5;
|
||||
placeholder_text = "Password...";
|
||||
}
|
||||
|
||||
@@ -1,28 +1,10 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [libnotify];
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
defaultTimeout = 5000; # milliseconds, can be overwritten by notification sender
|
||||
# backgroundColor = "#${palette.base00}"; TODO fix
|
||||
# textColor = "#${palette.base05}";
|
||||
# borderColor = "#${palette.base0D}";
|
||||
# progressColor = "over #${palette.base02}";
|
||||
# extraConfig = ''
|
||||
# [urgency=high]
|
||||
# border-color=#${palette.base09}
|
||||
# '';
|
||||
settings = {
|
||||
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -31,7 +31,7 @@
|
||||
in {
|
||||
services.swayidle = {
|
||||
enable = true;
|
||||
systemdTarget = "graphical-session.target";
|
||||
systemdTargets = ["graphical-session.target"];
|
||||
timeouts =
|
||||
# Lock screen
|
||||
[
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.colorscheme) colors;
|
||||
in {
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
color = "000000";
|
||||
ignore-empty-password = true;
|
||||
indicator-idle-visible = false;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
|
||||
|
||||
INTERNAL_MONITOR="@INTERNAL_MONITOR@"
|
||||
EXTERNAL_MONITOR="@EXTERNAL_MONITOR@"
|
||||
|
||||
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r --arg EXTERNAL "$EXTERNAL_MONITOR" '.[] | select(.name == $EXTERNAL) | .mirrorOf')
|
||||
|
||||
echo "current setting: "
|
||||
echo $MIRROR_SETTING
|
||||
if [ "$MIRROR_SETTING" = "none" ]; then
|
||||
echo "mirroring..."
|
||||
hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"$INTERNAL_MONITOR\"})"
|
||||
else
|
||||
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
|
||||
hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"\"})"
|
||||
fi
|
||||
@@ -12,7 +12,14 @@
|
||||
|
||||
"modules-center": [],
|
||||
|
||||
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||
"modules-right": ["idle_inhibitor", "custom/nixos-update", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||
|
||||
"custom/nixos-update": {
|
||||
"exec": "frajul-auto-upgrade-status",
|
||||
"return-type": "json",
|
||||
"interval": 2,
|
||||
"on-click-right": "frajul-auto-upgrade-toggle"
|
||||
},
|
||||
|
||||
"hyprland/workspaces": {
|
||||
"on-scroll-up": "hyprctl dispatch workspace m+1",
|
||||
@@ -35,6 +42,7 @@
|
||||
},
|
||||
|
||||
"idle_inhibitor": {
|
||||
"start-activated": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
|
||||
{config, ...}: let
|
||||
palette = config.lib.stylix.colors;
|
||||
in {
|
||||
stylix.targets.waybar.enable = false;
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
# systemd.enable = true;
|
||||
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,39 +1,3 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
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 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [wofi];
|
||||
|
||||
xdg.configFile."wofi/config".source = ./config;
|
||||
xdg.configFile."wofi/style.css".text = ''
|
||||
window {
|
||||
margin: 5px;
|
||||
border: 5px solid #181926;
|
||||
background-color: #${palette.base00};
|
||||
border-radius: 15px;
|
||||
font-family: "JetBrainsMono";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#input {
|
||||
all: unset;
|
||||
min-height: 36px;
|
||||
padding: 4px 10px;
|
||||
margin: 4px;
|
||||
border: none;
|
||||
color: #${palette.base05};
|
||||
font-weight: bold;
|
||||
background-color: #${palette.base01};
|
||||
outline: none;
|
||||
border-radius: 15px;
|
||||
margin: 10px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
margin: 4px;
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
margin: 0px;
|
||||
padding: 3px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
border: 5px solid #${palette.base01};
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin-top: 5px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#text:selected {
|
||||
color: #${palette.base01};
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#entry {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background: #${palette.base0D};
|
||||
background-size: 400% 400%;
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -22,9 +22,9 @@
|
||||
# Prevent screen from going blank (check these settings with `xset q`)
|
||||
# And disable bell sound (b)
|
||||
xsession.initExtra = ''
|
||||
${pkgs.xorg.xset}/bin/xset s off
|
||||
${pkgs.xorg.xset}/bin/xset -dpms
|
||||
${pkgs.xorg.xset}/bin/xset b off
|
||||
${pkgs.xset}/bin/xset s off
|
||||
${pkgs.xset}/bin/xset -dpms
|
||||
${pkgs.xset}/bin/xset b off
|
||||
'';
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
|
||||
@@ -142,8 +142,8 @@ bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||
|
||||
# Monitor config
|
||||
set $monitor_left "DVI-D-0"
|
||||
set $monitor_right "DVI-D-1"
|
||||
set $monitor_left "DVI-D-1"
|
||||
set $monitor_right "DVI-D-2"
|
||||
|
||||
workspace $ws1 output $monitor_left
|
||||
workspace $ws2 output $monitor_left
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
start_if_not_running()
|
||||
{
|
||||
program=$1
|
||||
pidof -sq $program
|
||||
if [ "$?" -eq "1" ]; then
|
||||
start_program $1
|
||||
else
|
||||
echo "$program is already running"
|
||||
fi
|
||||
}
|
||||
|
||||
start_program()
|
||||
{
|
||||
program=$1
|
||||
echo "Starting $program..."
|
||||
$program & > /dev/null
|
||||
}
|
||||
|
||||
i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-messaging.json'
|
||||
start_program nheko
|
||||
sleep 0.1
|
||||
start_program telegram-desktop
|
||||
sleep 0.1
|
||||
start_program thunderbird
|
||||
sleep 0.1
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
HDMI_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_3__sink"
|
||||
LAPTOP_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink"
|
||||
|
||||
HDMI_ICON=$(pactl info | grep -q $HDMI_SINK && echo "checkbox")
|
||||
LAPTOP_ICON=$(pactl info | grep -q $LAPTOP_SINK && echo "checkbox")
|
||||
|
||||
HDMI_VOLUME=$(pactl get-sink-volume $HDMI_SINK | head -n 1 | awk '{print $5}')
|
||||
LAPTOP_VOLUME=$(pactl get-sink-volume $LAPTOP_SINK | head -n 1 | awk '{print $5}')
|
||||
|
||||
read -r -d '' CONF <<EOF
|
||||
Open Pavucontrol,pavucontrol,pavucontrol
|
||||
|
||||
^sep()
|
||||
HDMI - $HDMI_VOLUME,pactl set-default-sink $HDMI_SINK,$HDMI_ICON
|
||||
Laptop - $LAPTOP_VOLUME,pactl set-default-sink $LAPTOP_SINK,$LAPTOP_ICON
|
||||
EOF
|
||||
|
||||
echo "$CONF" | jgmenu --simple
|
||||
@@ -1,10 +1,9 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [inputs.nixvim.homeManagerModules.nixvim];
|
||||
imports = [inputs.nixvim.homeModules.nixvim];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
@@ -19,7 +18,7 @@
|
||||
fd
|
||||
stylua
|
||||
black
|
||||
nixfmt-rfc-style # nixfmt
|
||||
nixfmt # nixfmt
|
||||
];
|
||||
|
||||
programs.nixvim = {
|
||||
@@ -36,6 +35,8 @@
|
||||
opts = {
|
||||
number = false;
|
||||
relativenumber = false;
|
||||
ignorecase = true;
|
||||
smartcase = true;
|
||||
};
|
||||
clipboard.register = "unnamedplus"; # Use system clipboard
|
||||
|
||||
@@ -49,7 +50,7 @@
|
||||
key = "<leader><space>";
|
||||
}
|
||||
{
|
||||
action = "<cmd>Telescope file_browser<cr>";
|
||||
action = "<cmd>Telescope file_browser path=%:p:h<cr>";
|
||||
key = "<leader>.";
|
||||
}
|
||||
{
|
||||
@@ -76,6 +77,7 @@
|
||||
neogit.enable = true; # like magit
|
||||
trouble.enable = true;
|
||||
web-devicons.enable = true;
|
||||
orgmode.enable = true; # org-mode support
|
||||
|
||||
# Shows file trees
|
||||
oil = {
|
||||
@@ -88,7 +90,7 @@
|
||||
# Code formatting
|
||||
conform-nvim = {
|
||||
enable = true;
|
||||
settings.formatters_by_ft = with pkgs; {
|
||||
settings.formatters_by_ft = {
|
||||
lua = ["stylua"];
|
||||
python = ["black"];
|
||||
nix = ["nixfmt"];
|
||||
@@ -140,17 +142,21 @@
|
||||
};
|
||||
|
||||
lsp = {
|
||||
enable = true;
|
||||
enable = true; # includes lsp-config, default settings for the lsps
|
||||
servers = {
|
||||
rust_analyzer = {
|
||||
enable = true;
|
||||
installCargo = true;
|
||||
installRustc = true;
|
||||
};
|
||||
nixd.enable = true;
|
||||
pyright.enable = true;
|
||||
dockerls.enable = true;
|
||||
lua_ls.enable = true;
|
||||
nixd.enable = true; # nix
|
||||
pyright.enable = true; # python
|
||||
dockerls.enable = true; # docker
|
||||
lua_ls.enable = true; # lua
|
||||
clangd.enable = true; # c, c++
|
||||
dartls.enable = true; # dart, flutter
|
||||
digestif.enable = true; # latex
|
||||
tinymist.enable = true; # typst
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{pkgs, ...}: {
|
||||
home.sessionVariables = {
|
||||
FLAKE = "/home/julian/.dotfiles";
|
||||
NH_FLAKE = "/home/julian/.dotfiles";
|
||||
};
|
||||
|
||||
home.shellAliases = {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
programs.distrobox = {
|
||||
enable = true;
|
||||
containers."qt-distrobox" = {
|
||||
image = "debian:12.2";
|
||||
exported_apps = "qtcreator";
|
||||
enableSystemdUnit = false; # fails in creating and does not recreate. Do distrobox-assemble create --replace --file ~/.config/distrobox/containers.ini instead
|
||||
additional_packages = [
|
||||
"qtcreator"
|
||||
"qt6-base-dev"
|
||||
"qt6-wayland"
|
||||
"qt6-tools-dev-tools"
|
||||
"qt6-tools-dev"
|
||||
"qt6-serialbus-dev"
|
||||
"qt6-websockets-dev"
|
||||
"libgl1-mesa-dev"
|
||||
"build-essential"
|
||||
"cmake"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
du-dust # Like du tree but better
|
||||
dust # Like du tree but better
|
||||
fd # better find
|
||||
fdupes # find and delete duplicate files
|
||||
ffmpeg
|
||||
@@ -19,12 +19,11 @@
|
||||
links2 # Tui web-browser
|
||||
lnav # log analyzing tool
|
||||
mc # Tui file browser
|
||||
# nix-index
|
||||
nmap
|
||||
p7zip # unzip 7zip archives
|
||||
parted
|
||||
pciutils # lspci
|
||||
poppler_utils # Pdf utils including pdfimages
|
||||
poppler-utils # Pdf utils including pdfimages
|
||||
libqalculate # Nice tui calculator (qalc)
|
||||
ripgrep # better grep
|
||||
rnr # renaming tool
|
||||
@@ -38,8 +37,9 @@
|
||||
usbutils # lsusb
|
||||
wget
|
||||
wireguard-tools # wg-quick
|
||||
xorg.xkill
|
||||
xkill
|
||||
zip
|
||||
dig
|
||||
|
||||
## My scripts
|
||||
frajul.edit-config
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [../../gtk];
|
||||
{pkgs, ...}: {
|
||||
# imports = [./stylix.nix];
|
||||
|
||||
services.blueman-applet.enable = true;
|
||||
services.nextcloud-client.enable = true;
|
||||
@@ -22,26 +18,33 @@
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
(anki.withAddons [
|
||||
ankiAddons.anki-connect
|
||||
ankiAddons.passfail2
|
||||
ankiAddons.review-heatmap
|
||||
])
|
||||
arandr
|
||||
calibre # ebook manager and viewer
|
||||
# digikam
|
||||
discord
|
||||
discord-ptb # in case discord updates take their time
|
||||
# dvdisaster
|
||||
# element-desktop
|
||||
# rocketchat-desktop
|
||||
thunderbird
|
||||
tdesktop # telegram
|
||||
telegram-desktop # telegram
|
||||
# schildichat-desktop # not updated regularly
|
||||
nheko
|
||||
element-desktop
|
||||
evince # Simple pdf reader, good for focusing on document content
|
||||
firefox
|
||||
# geogebra
|
||||
cheese
|
||||
handbrake
|
||||
kitty # Terminal
|
||||
# kitty # Terminal, already available as feature
|
||||
libnotify
|
||||
libreoffice
|
||||
mate.engrampa
|
||||
engrampa
|
||||
nomacs # Image viewer
|
||||
kdePackages.okular # Pdf reader with many features, good for commenting documents
|
||||
pavucontrol
|
||||
@@ -53,18 +56,23 @@
|
||||
rpi-imager # make isos
|
||||
# rustdesk
|
||||
tor-browser
|
||||
unstable.path-of-building # Path of Building
|
||||
# frajul.pob-dev-version # Path of Building
|
||||
rusty-path-of-building # Path of Building for poe1 and poe2
|
||||
vlc
|
||||
wineWowPackages.stable # 32-bit and 64-bit wine
|
||||
wineWow64Packages.stable # 32-bit and 64-bit wine
|
||||
winetricks
|
||||
xclip # x11 clipboard access from terminal
|
||||
xfce.mousepad # simple text editor
|
||||
mousepad # simple text editor
|
||||
xournalpp # Edit pdf files
|
||||
zoom-us # Video conferencing
|
||||
zotero # Manage papers and other sources
|
||||
pdfpc # Present slides in pdf form
|
||||
|
||||
networkmanager-openvpn
|
||||
keepassxc
|
||||
|
||||
unstable.joplin-desktop
|
||||
unstable.libation
|
||||
|
||||
## My scripts
|
||||
frajul.open-messaging
|
||||
frajul.xwacomcalibrate
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
{pkgs, ...}: {
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
programs.opencode = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.opencode;
|
||||
};
|
||||
|
||||
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
|
||||
android-tools # adb
|
||||
# shellcheck # Check bash scripts for common errors
|
||||
@@ -9,7 +22,7 @@
|
||||
clippy
|
||||
cntr # nix debugger
|
||||
conda
|
||||
micromamba # a better, faster conda
|
||||
# micromamba # a better, faster conda
|
||||
devcontainer # development container
|
||||
devenv # devbox alternative
|
||||
dbeaver-bin
|
||||
@@ -21,16 +34,21 @@
|
||||
unstable.zed-editor
|
||||
jdk
|
||||
julia-bin
|
||||
(texlive.combine {
|
||||
# for rendering latex in inkscape
|
||||
inherit
|
||||
(texlive)
|
||||
scheme-medium
|
||||
standalone
|
||||
amsmath
|
||||
preview
|
||||
;
|
||||
})
|
||||
# (texlive.combine {
|
||||
# # for rendering latex in inkscape
|
||||
# inherit
|
||||
# (texlive)
|
||||
# scheme-medium
|
||||
# standalone
|
||||
# amsmath
|
||||
# preview
|
||||
# # needed for org mode export
|
||||
# wrapfig
|
||||
# capt-of
|
||||
# biblatex
|
||||
# ;
|
||||
# })
|
||||
vagrant
|
||||
matlab # Using nix-matlab overlay defined in flake
|
||||
maven
|
||||
nodejs
|
||||
@@ -55,9 +73,14 @@
|
||||
sops
|
||||
pandoc # markdown preview
|
||||
docker-compose
|
||||
mise
|
||||
|
||||
mise
|
||||
|
||||
## My scripts
|
||||
frajul.deploy-to-pianopi
|
||||
frajul.smath-studio
|
||||
# frajul.rtklib
|
||||
|
||||
(pkgs.writeShellScriptBin "matlab-rsp" ''
|
||||
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
keyMode = "vi";
|
||||
customPaneNavigationAndResize = true; # use hjkl
|
||||
mouse = true;
|
||||
prefix = "C-Space"; # use instead of C-b
|
||||
};
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
misc.assume_yes = true;
|
||||
misc.no_retry = true;
|
||||
|
||||
pre_commands."Update flake" = "git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
|
||||
# pre_commands."Update flake" = "git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
|
||||
|
||||
linux.nix_arguments = "--flake /home/julian/.dotfiles";
|
||||
linux.home_manager_arguments = [
|
||||
|
||||
@@ -3,14 +3,11 @@
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
programs.zoxide.enable = true;
|
||||
programs.zoxide.enableFishIntegration = true;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
exiftool
|
||||
unar # extract archives
|
||||
xdragon # dragndrop
|
||||
poppler_utils # pdf preview
|
||||
dragon-drop # dragndrop
|
||||
poppler-utils # pdf preview
|
||||
fd
|
||||
ripgrep
|
||||
fzf
|
||||
@@ -19,14 +16,11 @@
|
||||
xclip
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
y = "yy"; # Yazi shell wrapper (cd on quit)
|
||||
};
|
||||
|
||||
programs.yazi.enable = true;
|
||||
programs.yazi.shellWrapperName = "y";
|
||||
programs.yazi.enableFishIntegration = true;
|
||||
programs.yazi.settings.manager = {
|
||||
sort_by = "modified";
|
||||
sort_by = "mtime";
|
||||
sort_reverse = true;
|
||||
show_hidden = true;
|
||||
};
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.file = {
|
||||
".config/starship.toml".source = ./starship.toml;
|
||||
};
|
||||
# home.file = {
|
||||
# ".config/starship.toml".source = ./starship.toml;
|
||||
# };
|
||||
|
||||
home.packages = with pkgs; [starship];
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
inputs,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
@@ -9,6 +10,7 @@
|
||||
[
|
||||
../features/fonts
|
||||
../features/nix-helper
|
||||
inputs.nix-index-database.homeModules.default # nix-locate
|
||||
]
|
||||
++ (builtins.attrValues outputs.homeManagerModules);
|
||||
|
||||
@@ -20,17 +22,32 @@
|
||||
"flakes"
|
||||
"ca-derivations"
|
||||
];
|
||||
# warn-dirty = false; # TODO: do I want it? also for systems
|
||||
warn-dirty = false; # TODO: do I want it? also for systems
|
||||
};
|
||||
};
|
||||
|
||||
# To allow unfree with 'nix run'
|
||||
xdg.configFile."nixpkgs/config.nix".text = ''
|
||||
{ allowUnfree = true; }
|
||||
'';
|
||||
|
||||
colorscheme.name = "catppuccin-mocha";
|
||||
|
||||
# systemd.user.startServices = "sd-switch"; # TODO: what is this
|
||||
|
||||
# Expire old hm generations
|
||||
hm-expire = {
|
||||
enable = true;
|
||||
dates = "weekly";
|
||||
expire = "-30 days";
|
||||
};
|
||||
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
git.enable = true;
|
||||
|
||||
nix-index.enable = true; # allows command-not-found
|
||||
nix-index-database.comma.enable = true;
|
||||
};
|
||||
|
||||
home = {
|
||||
@@ -40,14 +57,4 @@
|
||||
|
||||
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;
|
||||
# };
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
"text/calendar" = thunderbird;
|
||||
"application/x-extension-ics" = thunderbird;
|
||||
"x-scheme-handler/webcals" = thunderbird;
|
||||
"application/zip" = mate.engrampa;
|
||||
"text/plain" = xfce.mousepad;
|
||||
"application/zip" = engrampa;
|
||||
"text/plain" = mousepad;
|
||||
"image/jpeg" = nomacs;
|
||||
"application/pdf" = evince;
|
||||
"text/html" = firefox;
|
||||
|
||||
@@ -1,14 +1,35 @@
|
||||
# Only apply this to home-manager standalone
|
||||
{outputs, ...}: {
|
||||
# Apply overlays
|
||||
{
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [inputs.stylix.homeModules.stylix];
|
||||
|
||||
stylix.enable = true;
|
||||
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||
|
||||
# Expire old hm generations
|
||||
hm-expire = {
|
||||
enable = true;
|
||||
dates = "weekly";
|
||||
expire = "-30 days";
|
||||
};
|
||||
|
||||
# Remove unused packets
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
};
|
||||
|
||||
nixpkgs = {
|
||||
# Apply overlays
|
||||
overlays = builtins.attrValues outputs.overlays;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = _: true; # TODO: what is this
|
||||
permittedInsecurePackages = [
|
||||
"olm-3.2.16"
|
||||
];
|
||||
warn-dirty = false;
|
||||
};
|
||||
};
|
||||
@@ -19,12 +40,13 @@
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"http://binarycache.julian-mutter.de"
|
||||
"https://devenv.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
@@ -39,5 +61,8 @@
|
||||
];
|
||||
|
||||
# nix.settings. # warn-dirty = false; # TODO: do I want this
|
||||
#
|
||||
# Ensure we can still build when missing-server is not accessible
|
||||
fallback = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,12 +6,16 @@
|
||||
./features/direnv
|
||||
./features/topgrade
|
||||
./features/neovim
|
||||
./features/kitty
|
||||
./features/ghostty
|
||||
./features/wezterm
|
||||
./features/alacritty
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
|
||||
./features/tmux
|
||||
./features/qt-distrobox
|
||||
./features/hyprland
|
||||
# ./features/i3
|
||||
|
||||
./features/suites/cli
|
||||
./features/suites/desktop
|
||||
@@ -20,5 +24,46 @@
|
||||
|
||||
hostName = "kardorf";
|
||||
is-nixos = true;
|
||||
terminal = "kitty";
|
||||
terminal = "alacritty";
|
||||
|
||||
# ---------- -------- ---------
|
||||
# | HDMI-A-1 | | DP-1 | | DVI-D-1 |
|
||||
# ---------- -------- ---------
|
||||
monitors = [
|
||||
{
|
||||
name = "HDMI-A-1";
|
||||
width = 1920;
|
||||
height = 1080;
|
||||
position = "0x0";
|
||||
workspaces = [
|
||||
"8"
|
||||
"9"
|
||||
"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,38 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./global
|
||||
|
||||
./features/fish
|
||||
./features/topgrade
|
||||
./features/neovim
|
||||
./features/wezterm
|
||||
./features/yazi
|
||||
./features/nix-helper
|
||||
./features/desktop
|
||||
];
|
||||
|
||||
hostName = "pianonix";
|
||||
is-nixos = true;
|
||||
terminal = "wezterm";
|
||||
|
||||
services.syncthing.tray.enable = true;
|
||||
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||
|
||||
home.packages = with pkgs; [
|
||||
music-reader
|
||||
sheet-organizer
|
||||
|
||||
xournalpp
|
||||
musescore
|
||||
|
||||
onboard
|
||||
];
|
||||
|
||||
# Autostart link
|
||||
home.file = {
|
||||
".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
|
||||
".config/sheet-organizer/config.toml".text = ''
|
||||
working_directory = "/home/julian/Klavier"
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Quick configuration for setting up basic things on a standalone home-manager device
|
||||
# If you want to adapt it to a specific device, copy this file with the correct hostname
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./global
|
||||
|
||||
./features/fish
|
||||
./features/direnv
|
||||
./features/neovim
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
./features/nix-helper
|
||||
./features/tmux
|
||||
];
|
||||
|
||||
is-nixos = false;
|
||||
|
||||
home.sessionPath = ["/snap/bin"];
|
||||
|
||||
# Essential packages
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
dust
|
||||
fd
|
||||
ripgrep
|
||||
fzf
|
||||
lazygit
|
||||
mc
|
||||
tree
|
||||
wget
|
||||
];
|
||||
}
|
||||
@@ -13,12 +13,16 @@
|
||||
../features/yazi
|
||||
../features/emacs
|
||||
../features/nix-helper
|
||||
../features/qt-distrobox
|
||||
../features/tmux
|
||||
];
|
||||
|
||||
hostName = "aspi";
|
||||
is-nixos = false;
|
||||
# terminal = "kitty";
|
||||
|
||||
home.sessionPath = ["/snap/bin"];
|
||||
|
||||
home.packages =
|
||||
lib.lists.concatMap (packages-list-file: import packages-list-file {inherit pkgs;})
|
||||
[
|
||||
|
||||
@@ -5,7 +5,7 @@ with pkgs; [
|
||||
dejavu_fonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
|
||||
@@ -31,12 +31,12 @@ with pkgs; [
|
||||
ffmpeg
|
||||
julia-bin
|
||||
|
||||
poppler_utils # Pdf utils including pdfimages
|
||||
poppler-utils # Pdf utils including pdfimages
|
||||
sage
|
||||
|
||||
pkg-config # Often needed to build something
|
||||
|
||||
devbox # reproducible dev envs based on nix
|
||||
|
||||
mysql80
|
||||
devenv
|
||||
]
|
||||
|
||||
+32
-17
@@ -1,37 +1,52 @@
|
||||
{
|
||||
{pwd, ...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
../common/users/julian
|
||||
"${pwd}/features-nixos/global"
|
||||
"${pwd}/features-nixos/users/julian"
|
||||
"${pwd}/features-nixos/optional/binarycaches.nix"
|
||||
|
||||
../common/optional/remote-builder.nix
|
||||
../common/optional/boot-efi.nix
|
||||
# "${pwd}/features-nixos/optional/remote-builder.nix"
|
||||
"${pwd}/features-nixos/optional/boot-efi.nix"
|
||||
|
||||
../common/optional/greetd.nix
|
||||
../common/optional/authentication.nix
|
||||
../common/optional/pcmanfm.nix
|
||||
../common/optional/pipewire.nix
|
||||
"${pwd}/features-nixos/optional/greetd.nix"
|
||||
"${pwd}/features-nixos/optional/authentication.nix"
|
||||
"${pwd}/features-nixos/optional/pcmanfm.nix"
|
||||
"${pwd}/features-nixos/optional/pipewire.nix"
|
||||
|
||||
../common/optional/gamemode.nix
|
||||
../common/optional/virtualbox.nix
|
||||
"${pwd}/features-nixos/optional/gamemode.nix"
|
||||
"${pwd}/features-nixos/optional/virtualbox.nix"
|
||||
|
||||
../common/optional/podman.nix
|
||||
../common/optional/wireguard.nix
|
||||
../common/optional/flatpak.nix
|
||||
"${pwd}/features-nixos/optional/podman.nix"
|
||||
"${pwd}/features-nixos/optional/wireguard.nix"
|
||||
"${pwd}/features-nixos/optional/wireshark.nix"
|
||||
"${pwd}/features-nixos/optional/flatpak.nix"
|
||||
"${pwd}/features-nixos/optional/k9s"
|
||||
|
||||
../common/optional/avahi.nix
|
||||
"${pwd}/features-nixos/optional/avahi.nix"
|
||||
"${pwd}/features-nixos/optional/solokey.nix"
|
||||
];
|
||||
|
||||
networking.hostName = "aspi";
|
||||
system.stateVersion = "24.05";
|
||||
|
||||
# networking.firewall.checkReversePath = false; # Makes wg interface with all ips work
|
||||
|
||||
programs.ausweisapp.enable = true;
|
||||
programs.ausweisapp.openFirewall = true; # for pairing with smartphone
|
||||
|
||||
modules = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
overrideSettings = false;
|
||||
};
|
||||
frajulAutoUpgrade = {
|
||||
enable = true;
|
||||
flakePath = "/home/julian/.dotfiles";
|
||||
};
|
||||
};
|
||||
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
services.blueman.enable = true;
|
||||
services.upower.enable = true;
|
||||
@@ -39,8 +54,8 @@
|
||||
programs.steam.enable = true;
|
||||
|
||||
# TODO: not working
|
||||
services.logind.lidSwitch = "lock";
|
||||
services.logind.lidSwitchDocked = "lock";
|
||||
# services.logind.lidSwitch = "lock";
|
||||
# services.logind.lidSwitchDocked = "lock";
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
|
||||
|
||||
@@ -75,4 +75,9 @@
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
hardware.nvidia.open = false;
|
||||
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
};
|
||||
}
|
||||
|
||||
+71
-137
@@ -2,53 +2,58 @@
|
||||
# or
|
||||
# deploy .#builder
|
||||
{
|
||||
pwd,
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
outputs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
imports =
|
||||
[
|
||||
inputs.disko.nixosModules.disko
|
||||
|
||||
./disko.nix
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
];
|
||||
"${pwd}/features-nixos/global/fish.nix" # fish for admin
|
||||
"${pwd}/features-nixos/global/locale.nix"
|
||||
"${pwd}/features-nixos/global/nix.nix"
|
||||
"${pwd}/features-nixos/global/sops.nix"
|
||||
"${pwd}/features-nixos/global/root.nix"
|
||||
|
||||
# hardware.graphics = {
|
||||
# enable = true;
|
||||
# extraPackages = with pkgs; [
|
||||
# rocmPackages.clr.icd
|
||||
# linuxPackages.amdgpu-pro
|
||||
# ];
|
||||
# };
|
||||
# "${pwd}/features-nixos/optional/hydra.nix"
|
||||
# "${pwd}/features-nixos/optional/jenkins-agent.nix"
|
||||
]
|
||||
++ (builtins.attrValues outputs.nixosModules);
|
||||
|
||||
# boot.kernelParams = [
|
||||
# "radeon.si_support=0"
|
||||
# "radeon.cik_support=1"
|
||||
# "amdgpu.si_support=0"
|
||||
# "amdgpu.cik_support=1"
|
||||
# ];
|
||||
# boot.extraModulePackages = with config.boot.kernelPackages; [ amdgpu-pro ];
|
||||
# boot.blacklistedKernelModules = [ "radeon" ];
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
# Emulated systems used as alternative to cross-compiling
|
||||
boot.binfmt.emulatedSystems = ["aarch64-linux"];
|
||||
|
||||
networking.hostName = "builder";
|
||||
|
||||
modules = {
|
||||
keymap.enable = true;
|
||||
locales.enable = true;
|
||||
sops.enable = true;
|
||||
frajul.gitlab-runner = {
|
||||
enable = false;
|
||||
secretsFile = ./secrets.yaml;
|
||||
};
|
||||
frajul.gitea-runner = {
|
||||
enable = true;
|
||||
secretsFile = ./secrets.yaml;
|
||||
};
|
||||
|
||||
networking.hostName = "builder";
|
||||
system.stateVersion = "23.11";
|
||||
|
||||
networking.networkmanager.enable = true;
|
||||
networking.nameservers = [
|
||||
"192.168.3.252"
|
||||
"172.30.20.10"
|
||||
"1.1.1.1"
|
||||
];
|
||||
|
||||
users.mutableUsers = false;
|
||||
users.users.nix = {
|
||||
isNormalUser = true;
|
||||
description = "Nix";
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"docker"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -62,21 +67,40 @@
|
||||
substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"https://devenv.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
];
|
||||
trusted-public-keys = ["nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="];
|
||||
|
||||
trusted-users = ["nix"];
|
||||
max-jobs = "auto";
|
||||
cores = 0;
|
||||
|
||||
# Ensure we can still build when missing-server is not accessible
|
||||
fallback = true;
|
||||
};
|
||||
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
|
||||
flags = [
|
||||
"--recreate-lock-file" # update lock file
|
||||
];
|
||||
dates = "02:13";
|
||||
};
|
||||
|
||||
# optimize store by hardlinking store files
|
||||
nix.optimise.automatic = true;
|
||||
nix.optimise.dates = ["03:15"];
|
||||
nix.optimise.automatic = lib.mkForce true;
|
||||
nix.optimise.dates = lib.mkForce ["03:15"];
|
||||
|
||||
# nix.gc.automatic = true;
|
||||
# nix.gc.dates = "daily";
|
||||
# nix.gc.options = "--delete-old";
|
||||
nix.gc.automatic = lib.mkForce true;
|
||||
nix.gc.dates = lib.mkForce "daily";
|
||||
nix.gc.options = lib.mkForce "--delete-old";
|
||||
|
||||
# nix.settings.keep-derivations = false;
|
||||
# nix.settings.keep-outputs = true;
|
||||
@@ -87,17 +111,6 @@
|
||||
max-free = ${toString (100 * 1024 * 1024 * 1024)}
|
||||
'';
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
htop
|
||||
mc
|
||||
|
||||
# # AMD GPU tools
|
||||
# pciutils
|
||||
# nvtopPackages.amd
|
||||
# linuxPackages.amdgpu-pro
|
||||
];
|
||||
|
||||
nix.nrBuildUsers = 64;
|
||||
|
||||
# prevent memory to get filled
|
||||
@@ -107,26 +120,10 @@
|
||||
OOMScoreAdjust = 500;
|
||||
};
|
||||
|
||||
# Ollama used by open-webui as llm backend
|
||||
# services.ollama = {
|
||||
# enable = true;
|
||||
# # acceleration = "rocm";
|
||||
# };
|
||||
# services.open-webui = {
|
||||
# enable = true;
|
||||
# port = 8080;
|
||||
# openFirewall = true;
|
||||
# host = "builder.julian-mutter.de";
|
||||
# };
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
];
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
# require public key authentication for better security
|
||||
settings.PasswordAuthentication = true;
|
||||
settings.PasswordAuthentication = false;
|
||||
settings.KbdInteractiveAuthentication = false;
|
||||
settings.PermitRootLogin = "yes";
|
||||
};
|
||||
@@ -142,21 +139,7 @@
|
||||
|
||||
# security.pam.sshAgentAuth.enable = true; # enable sudo via ssh
|
||||
|
||||
services.hydra = {
|
||||
enable = true;
|
||||
hydraURL = "http://hydra.julian-mutter.de"; # externally visible URL
|
||||
port = 3000;
|
||||
notificationSender = "hydra@julian-mutter.de"; # e-mail of hydra service
|
||||
# a standalone hydra will require you to unset the buildMachinesFiles list to avoid using a nonexistant /etc/nix/machines
|
||||
# buildMachinesFiles = [ ];
|
||||
# you will probably also want, otherwise *everything* will be built from scratch
|
||||
useSubstitutes = true;
|
||||
|
||||
minimumDiskFree = 5; # in GB
|
||||
minimumDiskFreeEvaluator = 4; # in GB
|
||||
};
|
||||
|
||||
# add builder itself as build machine so system emulation is properly supported
|
||||
# add builder itpwd as build machine so system emulation is properly supported
|
||||
# nix.distributedBuilds = true;
|
||||
nix.buildMachines = [
|
||||
{
|
||||
@@ -178,79 +161,34 @@
|
||||
}
|
||||
];
|
||||
|
||||
# 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"
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
];
|
||||
|
||||
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;"
|
||||
# ;
|
||||
};
|
||||
};
|
||||
|
||||
# nix-serve
|
||||
virtualHosts."binarycache.julian-mutter.de" = {
|
||||
locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
|
||||
};
|
||||
|
||||
# attic
|
||||
clientMaxBodySize = "2G";
|
||||
virtualHosts."cache.julian-mutter.de" = {
|
||||
locations."/".proxyPass = "http://127.0.0.1:8080";
|
||||
};
|
||||
};
|
||||
|
||||
# =========== Gitea actions ==========
|
||||
services.gitea-actions-runner.instances."builder" = {
|
||||
enable = true;
|
||||
url = "https://gitlab.julian-mutter.de";
|
||||
name = "builder";
|
||||
tokenFile = config.sops.secrets."gitea_token".path;
|
||||
labels = []; # use default labels
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
# TODO: podman fails with: "cannot resolve hostname"
|
||||
# virtualisation.podman = {
|
||||
# enable = true;
|
||||
# dockerCompat = true;
|
||||
# defaultNetwork.settings.dns_enabled = true;
|
||||
# };
|
||||
|
||||
sops.secrets."gitea_token" = {
|
||||
owner = config.users.users.nix.name;
|
||||
sopsFile = ../../../secrets/secrets-builder.yaml;
|
||||
};
|
||||
|
||||
# =========== Binary Cache ==========
|
||||
sops.secrets."nix_serve_key".sopsFile = ./secrets.yaml;
|
||||
services.nix-serve = {
|
||||
enable = true;
|
||||
secretKeyFile = "/var/cache-priv-key.pem";
|
||||
secretKeyFile = config.sops.secrets."nix_serve_key".path;
|
||||
};
|
||||
|
||||
# =========== Binary Cache with attic ==========
|
||||
sops.secrets."attic_token".sopsFile = ../../../secrets/secrets-builder.yaml;
|
||||
sops.secrets."attic_token".sopsFile = ./secrets.yaml;
|
||||
|
||||
services.atticd = {
|
||||
enable = true;
|
||||
@@ -284,8 +222,4 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
system.stateVersion = "23.11";
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,15 +1,4 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [(modulesPath + "/profiles/qemu-guest.nix")];
|
||||
|
||||
{lib, ...}: {
|
||||
boot.initrd.availableKernelModules = [
|
||||
"ata_piix"
|
||||
"uhci_hcd"
|
||||
@@ -18,21 +7,14 @@
|
||||
"sd_mod"
|
||||
"sr_mod"
|
||||
];
|
||||
# boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support
|
||||
boot.kernelModules = [];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/f088fe8e-bf3d-4a89-98bd-ead9852d381f";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.ens18.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
|
||||
# Emulated systems used as alternative to cross-compiling
|
||||
boot.binfmt.emulatedSystems = ["aarch64-linux"];
|
||||
}
|
||||
|
||||
+20
-23
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user