Compare commits
294 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 474eaeb70f | |||
| c89381d4b2 | |||
| 611c2ae0b8 | |||
| 953fc805e1 | |||
| 8ec5fdfd51 | |||
| 0c2618e2be | |||
| 0c90742be4 | |||
| fba4ff5bfe | |||
| f980d31fab | |||
| 2d4babd2d3 | |||
| 0425432ee7 | |||
| 92cefa635e | |||
| d97cfd98af | |||
| c968ed5756 | |||
| a09424d105 | |||
| b627082df6 | |||
| f1e9bbf7b6 | |||
| 7db3a4e7fe | |||
| 862e4b33f9 | |||
| 5fb137df1e | |||
| fa17d676c5 | |||
| 33b0a4940d | |||
| 9016f679cd | |||
| 5b16d68ff8 | |||
| cca02f9825 | |||
| 8ee097a143 | |||
| c027aed280 | |||
| a0b52a880d | |||
| a376f84262 | |||
| f9cbe86eff | |||
| 7f88bca1d4 | |||
| ebd098e7f2 | |||
| cab2925994 | |||
| 33944fcfa8 | |||
| 76d918f32c | |||
| cf37176681 | |||
| 5f75a4cfe9 | |||
| 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 | |||
| 903776dca6 | |||
| b6dc568215 | |||
| 130c341816 | |||
| 8d0430ae52 | |||
| 68da077c72 | |||
| 7d17c52192 | |||
| c217e3297b | |||
| c41a642593 | |||
| d02f28ad89 | |||
| 7d18d2bd50 | |||
| 68c37c0f42 | |||
| 20e2b5e20e | |||
| 08d3844778 | |||
| 34084e45aa | |||
| 7c1c51954e | |||
| 659d235fc7 | |||
| 64958b068f | |||
| 95d9f9cf61 | |||
| 6f57594884 | |||
| b077da4998 | |||
| 8aaf0b81c2 | |||
| 439b4d769e | |||
| 66bde6646f | |||
| c323a747ea | |||
| d87cec971a | |||
| 7db055ca27 | |||
| 532bbe8675 | |||
| dcdc97aad8 | |||
| 94498a0038 | |||
| 05350e1c1c | |||
| 142b16fa9c | |||
| 6f2de694a0 | |||
| 3f9442fd02 | |||
| fb2626372f | |||
| c18b1a7341 | |||
| 1e4d267ce7 | |||
| 63c3d1af27 | |||
| 2e20534bba | |||
| 3f0b46f3d8 | |||
| 9659bbff1e | |||
| 73c440c9cd | |||
| d0942d018b | |||
| 642398da4b | |||
| 07a321c79a | |||
| 459c6ac27e | |||
| 02cc4f8ed8 |
@@ -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 = []
|
|
||||||
@@ -22,22 +22,23 @@ jobs:
|
|||||||
git config user.name "Gitea Actions"
|
git config user.name "Gitea Actions"
|
||||||
git config user.email "actions@gitea.local"
|
git config user.email "actions@gitea.local"
|
||||||
|
|
||||||
- name: Merge master branch
|
- name: Rebase from master branch
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
git fetch origin master
|
||||||
commits_ahead=$(git rev-list --count HEAD..origin/master)
|
commits_ahead=$(git rev-list --count HEAD..origin/master)
|
||||||
echo "Commits ahead: $commits_ahead"
|
echo "Commits ahead: $commits_ahead"
|
||||||
git log --oneline -5
|
git log --oneline -5
|
||||||
echo "----------"
|
echo "----------"
|
||||||
git log --oneline -5 origin/master
|
git log --oneline -5 origin/master
|
||||||
|
echo .
|
||||||
|
|
||||||
if [ $commits_ahead -ne 0 ]
|
if [ $commits_ahead -ne 0 ]
|
||||||
then
|
then
|
||||||
git fetch origin
|
git rebase -X theirs origin/master
|
||||||
git merge -X theirs --squash origin/master
|
git push --force-with-lease origin flake-updates
|
||||||
git commit -m "Merge master branch squashed $(date -I)"
|
|
||||||
else
|
else
|
||||||
echo "Merge not necessary"
|
echo "Rebase not necessary"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Set up Nix
|
- name: Set up Nix
|
||||||
@@ -54,4 +55,4 @@ jobs:
|
|||||||
git diff --cached --quiet && echo "No changes to commit." && exit 0
|
git diff --cached --quiet && echo "No changes to commit." && exit 0
|
||||||
|
|
||||||
git commit -m "Update flake.lock $(date -I)"
|
git commit -m "Update flake.lock $(date -I)"
|
||||||
git push origin flake-updates
|
git push --force-with-lease origin flake-updates
|
||||||
|
|||||||
+3
-5
@@ -1,5 +1,3 @@
|
|||||||
.dotter/cache.toml
|
.direnv
|
||||||
.dotter/cache
|
result*
|
||||||
.dotter/local.toml
|
*.qcow2
|
||||||
|
|
||||||
nix/result
|
|
||||||
|
|||||||
+7
-6
@@ -1,25 +1,26 @@
|
|||||||
keys:
|
keys:
|
||||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||||
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
|
||||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||||
|
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||||
|
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: secrets/secrets.yaml$
|
- path_regex: hosts/secrets-common.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *primary
|
- *primary
|
||||||
- *aspi-ssh
|
- *aspi-ssh
|
||||||
- *pianonix-ssh
|
- *kardorf-ssh
|
||||||
|
|
||||||
- path_regex: secrets/secrets-builder.yaml$
|
- path_regex: hosts/builder/secrets.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *primary
|
- *primary
|
||||||
- *builder-ssh
|
- *builder-ssh
|
||||||
|
|
||||||
- path_regex: secrets/.+
|
- path_regex: features-nixos/optional/k9s/kubeconfig.secret.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *primary
|
- *primary
|
||||||
- *aspi-ssh
|
- *aspi-ssh
|
||||||
- *pianonix-ssh
|
- *kardorf-ssh
|
||||||
|
|||||||
+8
-3
@@ -1,7 +1,12 @@
|
|||||||
#+title: My dotfiles
|
#+title: My dotfiles
|
||||||
|
|
||||||
My dotfiles for which I am using =nix=.
|
* Quick start for home-manger only (no need to pull this repo)
|
||||||
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]]
|
- Install nix using the https://github.com/DeterminateSystems/nix-installer
|
||||||
|
- Then run
|
||||||
|
#+begin_src shell
|
||||||
|
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
|
||||||
|
#+end_src
|
||||||
|
- Done
|
||||||
|
|
||||||
* Machine selection
|
* Machine selection
|
||||||
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
||||||
@@ -24,7 +29,7 @@ sops edit secrets/secrets.yaml
|
|||||||
** Authorize new device
|
** Authorize new device
|
||||||
- Generate public key from ssh -> Private age key generation not needed
|
- Generate public key from ssh -> Private age key generation not needed
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key
|
ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
|
||||||
#+end_src
|
#+end_src
|
||||||
- Add age public key to file:.sops.yaml
|
- Add age public key to file:.sops.yaml
|
||||||
- Update keys
|
- Update keys
|
||||||
|
|||||||
@@ -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";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Common config for all hosts
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
outputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
./fish.nix # fish for admin
|
||||||
|
./locale.nix
|
||||||
|
./nix.nix
|
||||||
|
./sops.nix
|
||||||
|
./root.nix
|
||||||
|
./stylix.nix
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
]
|
||||||
|
++ (builtins.attrValues outputs.nixosModules);
|
||||||
|
|
||||||
|
# Replaces the (modulesPath + "/installer/scan/not-detected.nix") from default hardware-configuration.nix
|
||||||
|
# Enables non-free firmware
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
|
||||||
|
# Networking
|
||||||
|
networking.networkmanager = {
|
||||||
|
enable = true;
|
||||||
|
plugins = with pkgs; [
|
||||||
|
networkmanager-openconnect
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services.resolved.enable = false;
|
||||||
|
# MDNS Taken by avahi
|
||||||
|
# networking.networkmanager.dns = "none";
|
||||||
|
networking.nameservers = lib.mkDefault [
|
||||||
|
"1.1.1.1"
|
||||||
|
"8.8.8.8"
|
||||||
|
];
|
||||||
|
|
||||||
|
# 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,10 @@
|
|||||||
|
{
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
vendor = {
|
||||||
|
completions.enable = true;
|
||||||
|
config.enable = true;
|
||||||
|
functions.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
# Select internationalisation properties.
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "de_DE.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||||
|
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||||
|
LC_MONETARY = "de_DE.UTF-8";
|
||||||
|
LC_NAME = "de_DE.UTF-8";
|
||||||
|
LC_NUMERIC = "en_US.UTF-8";
|
||||||
|
LC_PAPER = "de_DE.UTF-8";
|
||||||
|
LC_TELEPHONE = "de_DE.UTF-8";
|
||||||
|
LC_TIME = "de_DE.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keymap
|
||||||
|
services.xserver.xkb = {
|
||||||
|
layout = "de";
|
||||||
|
variant = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
console.keyMap = "de";
|
||||||
|
|
||||||
|
time.timeZone = "Europe/Berlin";
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
{outputs, ...}: {
|
||||||
|
# Apply overlays
|
||||||
|
nixpkgs = {
|
||||||
|
overlays = builtins.attrValues outputs.overlays;
|
||||||
|
config = {
|
||||||
|
nvidia.acceptLicense = true;
|
||||||
|
allowUnfree = true;
|
||||||
|
allowUnfreePredicate = _: true; # TODO: what is this
|
||||||
|
warn-dirty = false;
|
||||||
|
permittedInsecurePackages = [
|
||||||
|
"olm-3.2.16"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
"ca-derivations"
|
||||||
|
];
|
||||||
|
# warn-dirty = false;
|
||||||
|
|
||||||
|
nix.gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
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;
|
||||||
|
|
||||||
|
# TODO: is this useful?, what does it do?
|
||||||
|
# nix.settings.flake-registry = ""; # Disable global flake registry
|
||||||
|
# Add each flake input as a registry and nix_path
|
||||||
|
# registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
|
||||||
|
# nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
# Packages needed as root
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
vim
|
||||||
|
htop
|
||||||
|
mc
|
||||||
|
gparted-xhost # needs to be installed as system package so it can be actually opened
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
pwd,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
isEd25519 = k: k.type == "ed25519";
|
||||||
|
getKeyPath = k: k.path;
|
||||||
|
keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
|
||||||
|
in {
|
||||||
|
imports = [inputs.sops-nix.nixosModules.sops];
|
||||||
|
|
||||||
|
sops.age = {
|
||||||
|
sshKeyPaths = map getKeyPath keys;
|
||||||
|
|
||||||
|
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
|
||||||
|
# keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||||
|
# Generate key if none of the above worked. With this, building will still work, just without secrets
|
||||||
|
generateKey = false; # TODO: building should not work without secrets!?
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.defaultSopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [inputs.stylix.nixosModules.stylix];
|
||||||
|
|
||||||
|
stylix.enable = true;
|
||||||
|
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# Make programs like nextcloud client access saved passwords
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
|
programs.seahorse.enable = true;
|
||||||
|
programs.ssh.askPassword = lib.mkForce "${pkgs.seahorse}/libexec/seahorse/ssh-askpass"; # Solve conflicting definition in seahorse and plasma6
|
||||||
|
|
||||||
|
# Make authentication work for e.g. gparted
|
||||||
|
security.polkit.enable = true;
|
||||||
|
systemd = {
|
||||||
|
user.services.polkit-gnome-authentication-agent-1 = {
|
||||||
|
description = "polkit-gnome-authentication-agent-1";
|
||||||
|
wantedBy = ["graphical-session.target"];
|
||||||
|
wants = ["graphical-session.target"];
|
||||||
|
after = ["graphical-session.target"];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 1;
|
||||||
|
TimeoutStopSec = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
# MDNS on local network
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
nssmdns6 = true;
|
||||||
|
publish.enable = true;
|
||||||
|
publish.addresses = true;
|
||||||
|
ipv4 = true;
|
||||||
|
ipv6 = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
outputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# Setup binary caches
|
||||||
|
nix.settings = {
|
||||||
|
substituters = [
|
||||||
|
"https://nix-community.cachix.org"
|
||||||
|
"https://cache.nixos.org/"
|
||||||
|
"https://hyprland.cachix.org"
|
||||||
|
# "http://binarycache.julian-mutter.de"
|
||||||
|
"https://devenv.cachix.org"
|
||||||
|
"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:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||||
|
"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,17 @@
|
|||||||
|
{
|
||||||
|
# Bootloader
|
||||||
|
# Use this for simple nix boot menu, if no dual boot required
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.systemd-boot.configurationLimit = 10;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/c32c39d6f3b1fe6514598fa40ad2cf9ce22c3fb7/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix#L66
|
||||||
|
boot.loader.systemd-boot.editor = false;
|
||||||
|
|
||||||
|
boot.supportedFilesystems = [
|
||||||
|
"btrfs"
|
||||||
|
"ntfs"
|
||||||
|
"nfs"
|
||||||
|
"cifs"
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
virtualisation.docker = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
xdg.portal.enable = true;
|
||||||
|
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
|
||||||
|
xdg.portal.config.common.default = "*"; # Use first portal implementation found
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
programs.gamemode = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
softrealtime = "auto";
|
||||||
|
inhibit_screensaver = 1;
|
||||||
|
renice = 5;
|
||||||
|
};
|
||||||
|
# gpu = {
|
||||||
|
# apply_gpu_optimisations = "accept-responsibility";
|
||||||
|
# gpu_device = 1;
|
||||||
|
# amd_performance_level = "high";
|
||||||
|
# };
|
||||||
|
custom = {
|
||||||
|
start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'";
|
||||||
|
end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services.xserver.displayManager.gdm = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# unlock GPG keyring on login
|
||||||
|
security.pam.services.gdm.enableGnomeKeyring = 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,16 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services.xserver.windowManager.i3.enable = true;
|
||||||
|
services.xserver.windowManager.i3.package = pkgs.i3-gaps;
|
||||||
|
services.displayManager.defaultSession = "none+i3";
|
||||||
|
|
||||||
|
programs.xss-lock = {
|
||||||
|
# responds to "loginctl lock-session" via dbus
|
||||||
|
enable = true;
|
||||||
|
lockerCommand = "${pkgs.i3lock}/bin/i3lock --ignore-empty-password --color=000000";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
security.krb5.enable = true;
|
||||||
|
security.krb5.settings = {
|
||||||
|
# domain_realm = {
|
||||||
|
# ".julian-mutter.de" = "julian-mutter.de";
|
||||||
|
# "julian-mutter.de" = "julian-mutter.de";
|
||||||
|
# };
|
||||||
|
libdefaults = {
|
||||||
|
default_realm = "julian-mutter.de";
|
||||||
|
# dns_lookup_realm = true;
|
||||||
|
# dns_lookup_kdc = true;
|
||||||
|
# ticket_lifetime = "24h";
|
||||||
|
# renew_lifetime = "7d";
|
||||||
|
};
|
||||||
|
realms = {
|
||||||
|
"julian-mutter.de" = {
|
||||||
|
kdc = ["kerberos.julian-mutter.de"];
|
||||||
|
admin_server = "kerberos-admin.julian-mutter.de";
|
||||||
|
default_domain = "julian-mutter.de";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
outputs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
hosts = lib.attrNames outputs.nixosConfigurations;
|
||||||
|
in {
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
# Harden
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
PermitRootLogin = "no";
|
||||||
|
|
||||||
|
# TODO: what does this do
|
||||||
|
# Let WAYLAND_DISPLAY be forwarded
|
||||||
|
# AcceptEnv = "WAYLAND_DISPLAY";
|
||||||
|
X11Forwarding = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
hostKeys = [
|
||||||
|
{
|
||||||
|
path = "/etc/ssh/ssh_host_ed25519_key";
|
||||||
|
type = "ed25519";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: is automatic known hosts file even necessary?
|
||||||
|
# programs.ssh = {
|
||||||
|
# # Each hosts public key
|
||||||
|
# knownHosts = lib.genAttrs hosts (hostname: {
|
||||||
|
# publicKeyFile = ../../${hostname}/ssh_host_ed25519_key.pub;
|
||||||
|
# extraHostNames =
|
||||||
|
# [
|
||||||
|
# # "${hostname}.m7.rs"
|
||||||
|
# ]
|
||||||
|
# ++
|
||||||
|
# # Alias for localhost if it's the same host
|
||||||
|
# (lib.optional (hostname == config.networking.hostName) "localhost")
|
||||||
|
# # Alias to m7.rs and git.m7.rs if it's alcyone
|
||||||
|
# ++ (lib.optionals (hostname == "alcyone") [
|
||||||
|
# "m7.rs"
|
||||||
|
# "git.m7.rs"
|
||||||
|
# ]);
|
||||||
|
# });
|
||||||
|
# };
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
shared-mime-info # extended mimetype support
|
||||||
|
lxmenu-data # open with "Installed Applications"
|
||||||
|
pcmanfm
|
||||||
|
];
|
||||||
|
|
||||||
|
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pulseaudio.enable = false;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
wireplumber.enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
extraConfig.pipewire = {
|
||||||
|
"99-no-bell" = {
|
||||||
|
# Disable bell sound
|
||||||
|
"context.properties" = {
|
||||||
|
"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,10 @@
|
|||||||
|
{config, ...}: let
|
||||||
|
dockerEnabled = config.virtualisation.docker.enable;
|
||||||
|
in {
|
||||||
|
virtualisation.podman = {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = !dockerEnabled;
|
||||||
|
dockerSocket.enable = !dockerEnabled;
|
||||||
|
defaultNetwork.settings.dns_enabled = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# Set location used by redshift
|
||||||
|
location.provider = "manual";
|
||||||
|
location.latitude = 47.92;
|
||||||
|
location.longitude = 10.12;
|
||||||
|
services.redshift.enable = true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
nix.distributedBuilds = true;
|
||||||
|
nix.settings.builders-use-substitutes = true;
|
||||||
|
|
||||||
|
nix.buildMachines = [
|
||||||
|
{
|
||||||
|
hostName = "builder.julian-mutter.de";
|
||||||
|
protocol = "ssh";
|
||||||
|
sshUser = "nix";
|
||||||
|
systems = [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
maxJobs = 4;
|
||||||
|
speedFactor = 3;
|
||||||
|
supportedFeatures = [
|
||||||
|
"nixos-test"
|
||||||
|
"benchmark"
|
||||||
|
"big-parallel"
|
||||||
|
"kvm"
|
||||||
|
];
|
||||||
|
mandatoryFeatures = [];
|
||||||
|
}
|
||||||
|
# {
|
||||||
|
# hostName = "localhost";
|
||||||
|
# protocol = null;
|
||||||
|
# systems = [
|
||||||
|
# "x86_64-linux"
|
||||||
|
# ];
|
||||||
|
# maxJobs = 4;
|
||||||
|
# speedFactor = 1;
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.thunar.enable = true;
|
||||||
|
programs.xfconf.enable = true; # Persist saved preferences
|
||||||
|
programs.thunar.plugins = with pkgs.xfce; [
|
||||||
|
thunar-archive-plugin
|
||||||
|
thunar-volman
|
||||||
|
thunar-media-tags-plugin
|
||||||
|
];
|
||||||
|
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||||
|
services.tumbler.enable = true; # Thumbnail support for images
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
virtualisation.virtualbox.host.enable = true;
|
||||||
|
# virtualisation.virtualbox.host.enableExtensionPack = true;
|
||||||
|
# virtualisation.virtualbox.guest.enable = true;
|
||||||
|
# virtualisation.virtualbox.guest.x11 = true;
|
||||||
|
users.extraGroups.vboxusers.members = ["julian"];
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
networking.wg-quick.interfaces = {
|
||||||
|
julian = {
|
||||||
|
configFile = "/etc/wireguard/julian.conf";
|
||||||
|
autostart = true; # This interface is started on boot
|
||||||
|
};
|
||||||
|
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"];
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
wacom.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
pwd,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
|
||||||
|
in {
|
||||||
|
users.mutableUsers = false;
|
||||||
|
users.users.julian = {
|
||||||
|
description = "Julian";
|
||||||
|
group = "julian";
|
||||||
|
isNormalUser = true;
|
||||||
|
uid = 1000;
|
||||||
|
shell = pkgs.fish;
|
||||||
|
extraGroups = ifTheyExist [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel"
|
||||||
|
"audio"
|
||||||
|
"realtime"
|
||||||
|
"rtkit"
|
||||||
|
"network"
|
||||||
|
"video"
|
||||||
|
"podman"
|
||||||
|
"docker"
|
||||||
|
"git"
|
||||||
|
"gamemode"
|
||||||
|
"dialout"
|
||||||
|
];
|
||||||
|
|
||||||
|
openssh.authorizedKeys.keys = lib.splitString "\n" (
|
||||||
|
builtins.readFile ./ssh.pub
|
||||||
|
);
|
||||||
|
# hashedPasswordFile = config.sops.secrets.julian-password.path;
|
||||||
|
hashedPassword = "$y$j9T$N33kLJQbV8soUoCbDkpwA1$r/yahJDgOPo4GGOrAi6BUG5zLTzmaBrA5NQ4nno561A";
|
||||||
|
packages = [pkgs.home-manager];
|
||||||
|
};
|
||||||
|
users.groups.julian = {
|
||||||
|
gid = 1000;
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.secrets.julian-password = {
|
||||||
|
sopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||||
|
neededForUsers = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.julian = import "${pwd}/homes/julian/${config.networking.hostName}.nix";
|
||||||
|
|
||||||
|
security.pam.services.swaylock = {}; # Make swaylock unlocking work
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H
|
||||||
@@ -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
+488
-334
File diff suppressed because it is too large
Load Diff
@@ -2,150 +2,167 @@
|
|||||||
description = "Home Manager configuration of julian";
|
description = "Home Manager configuration of julian";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
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";
|
||||||
deploy-rs.url = "github:serokell/deploy-rs";
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
|
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
noctalia = {
|
||||||
|
url = "github:noctalia-dev/noctalia-shell";
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/release-24.11";
|
url = "github:nix-community/home-manager/release-26.05";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
nix-index-database = {
|
||||||
snowfall-lib = {
|
url = "github:nix-community/nix-index-database";
|
||||||
url = "github:snowfallorg/lib";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nix-gl = {
|
||||||
|
url = "github:nix-community/nixgl";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
disko = {
|
disko = {
|
||||||
url = "github:nix-community/disko";
|
url = "github:nix-community/disko";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
alacritty-theme = {
|
# Various flakes
|
||||||
url = "github:alacritty/alacritty-theme";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
yazi-flavors = {
|
yazi-flavors = {
|
||||||
url = "github:yazi-rs/flavors";
|
url = "github:yazi-rs/flavors";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixvim = {
|
nixvim = {
|
||||||
url = "github:nix-community/nixvim/nixos-24.11";
|
url = "github:nix-community/nixvim/nixos-26.05";
|
||||||
# If using a stable channel you can use `url = "github:nix-community/nixvim/nixos-<version>"`
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nix-matlab = {
|
||||||
|
url = "gitlab:doronbehar/nix-matlab";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
nix-matlab.url = "gitlab:doronbehar/nix-matlab";
|
# My projects
|
||||||
nix-matlab.inputs.nixpkgs.follows = "nixpkgs";
|
sheet-organizer = {
|
||||||
|
url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
|
||||||
sops-nix.url = "github:Mic92/sops-nix";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
hyprland.url = "github:hyprwm/Hyprland?submodules=1";
|
|
||||||
# hyprland.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
hyprland-plugins = {
|
|
||||||
url = "github:hyprwm/hyprland-plugins";
|
|
||||||
inputs.hyprland.follows = "hyprland";
|
|
||||||
};
|
};
|
||||||
|
music-reader = {
|
||||||
nix-colors.url = "github:Misterio77/nix-colors";
|
url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
nix-topology.url = "github:oddlama/nix-topology";
|
|
||||||
nix-topology.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
nix-ld.url = "github:Mic92/nix-ld";
|
|
||||||
nix-ld.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
## My projects
|
|
||||||
sheet-organizer.url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
|
|
||||||
sheet-organizer.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
music-reader.url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
|
|
||||||
music-reader.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs =
|
|
||||||
inputs:
|
|
||||||
inputs.snowfall-lib.mkFlake {
|
|
||||||
inherit inputs;
|
|
||||||
# Must always be ./.
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
# Add overlays for the `nixpkgs` channel.
|
|
||||||
overlays = with inputs; [
|
|
||||||
nix-matlab.overlay
|
|
||||||
nix-topology.overlays.default
|
|
||||||
];
|
|
||||||
|
|
||||||
snowfall = {
|
|
||||||
# The root of the snowfall config
|
|
||||||
root = ./.;
|
|
||||||
# lib, package and overlay namespace
|
|
||||||
namespace = "frajul"; # defaults to "internal"
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
name = "Julian's dotfiles";
|
|
||||||
title = "Julian's dotfiles";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# The attribute set specified here will be passed directly to NixPkgs when
|
outputs = {
|
||||||
# instantiating the package set.
|
self,
|
||||||
channels-config = {
|
nixpkgs,
|
||||||
# Allow unfree packages.
|
home-manager,
|
||||||
allowUnfree = true;
|
systems,
|
||||||
nvidia.acceptLicense = true;
|
...
|
||||||
|
} @ inputs: let
|
||||||
# Allow certain insecure packages
|
inherit (self) outputs;
|
||||||
permittedInsecurePackages = [ "olm-3.2.16" ];
|
lib = nixpkgs.lib // home-manager.lib;
|
||||||
};
|
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
|
||||||
|
pkgsFor = lib.genAttrs (import systems) (
|
||||||
systems.modules.nixos = with inputs; [
|
system:
|
||||||
nix-topology.nixosModules.default
|
import nixpkgs {
|
||||||
sops-nix.nixosModules.sops
|
inherit system;
|
||||||
disko.nixosModules.disko
|
config.allowUnfree = true;
|
||||||
];
|
|
||||||
systems.hosts.pianonix.modules = with inputs; [ nixos-hardware.nixosModules.raspberry-pi-4 ];
|
|
||||||
|
|
||||||
# topology =
|
|
||||||
# with inputs;
|
|
||||||
# let
|
|
||||||
# host = self.nixosConfigurations.${builtins.head (builtins.attrNames self.nixosConfigurations)};
|
|
||||||
# in
|
|
||||||
# import nix-topology {
|
|
||||||
# inherit (host) pkgs; # Only this package set must include nix-topology.overlays.default
|
|
||||||
# modules = [
|
|
||||||
# (import ./topology { inherit (host) config; })
|
|
||||||
# { inherit (self) nixosConfigurations; }
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
}
|
}
|
||||||
// {
|
);
|
||||||
# deploy-rs node configuration
|
in {
|
||||||
deploy.nodes.pianonix = {
|
inherit lib;
|
||||||
hostname = "pianonix.local";
|
|
||||||
profiles.system = {
|
nixosModules = import ./modules/nixos;
|
||||||
sshUser = "root";
|
homeManagerModules = import ./modules/home-manager;
|
||||||
user = "root";
|
|
||||||
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos inputs.self.nixosConfigurations.pianonix;
|
overlays = import ./overlays {inherit inputs outputs;};
|
||||||
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
|
|
||||||
|
packages = forEachSystem (pkgs: import ./packages {inherit pkgs;});
|
||||||
|
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
|
||||||
|
formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt *
|
||||||
|
|
||||||
|
nixosConfigurations = {
|
||||||
|
# Main laptop
|
||||||
|
aspi = lib.nixosSystem {
|
||||||
|
modules = [
|
||||||
|
./hosts/aspi
|
||||||
|
];
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs outputs;
|
||||||
|
pwd = "${self}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
kardorf = lib.nixosSystem {
|
||||||
|
modules = [./hosts/kardorf];
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs outputs;
|
||||||
|
pwd = "${self}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
builder = lib.nixosSystem {
|
||||||
|
modules = [./hosts/builder];
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs outputs;
|
||||||
|
pwd = "${self}";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
deploy.nodes.builder = {
|
# Standalone HM
|
||||||
|
homeConfigurations = {
|
||||||
|
"julian@v3ms" = lib.homeManagerConfiguration {
|
||||||
|
modules = [
|
||||||
|
./homes/julian/v3ms
|
||||||
|
./homes/julian/hm-standalone-config.nix
|
||||||
|
];
|
||||||
|
pkgs = pkgsFor.x86_64-linux;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit inputs outputs;
|
||||||
|
pwd = "${self}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"julian@quickstart" = lib.homeManagerConfiguration {
|
||||||
|
modules = [
|
||||||
|
./homes/julian/quickstart.nix
|
||||||
|
./homes/julian/hm-standalone-config.nix
|
||||||
|
];
|
||||||
|
pkgs = pkgsFor.x86_64-linux;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit inputs outputs;
|
||||||
|
pwd = "${self}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# deploy-rs node configuration
|
||||||
|
deploy.nodes = {
|
||||||
|
builder = {
|
||||||
hostname = "builder.julian-mutter.de";
|
hostname = "builder.julian-mutter.de";
|
||||||
profiles.system = {
|
profiles.system = {
|
||||||
sshUser = "root";
|
sshUser = "root";
|
||||||
user = "root";
|
user = "root";
|
||||||
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos inputs.self.nixosConfigurations.builder;
|
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
|
||||||
remoteBuild = true;
|
remoteBuild = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./global
|
||||||
|
|
||||||
|
./features/fish
|
||||||
|
./features/direnv
|
||||||
|
./features/topgrade
|
||||||
|
./features/neovim
|
||||||
|
./features/ghostty
|
||||||
|
./features/wezterm
|
||||||
|
./features/alacritty
|
||||||
|
./features/yazi
|
||||||
|
./features/emacs
|
||||||
|
./features/tmux
|
||||||
|
./features/qt-distrobox
|
||||||
|
|
||||||
|
./features/hyprland
|
||||||
|
|
||||||
|
./features/suites/cli
|
||||||
|
./features/suites/desktop
|
||||||
|
./features/suites/development
|
||||||
|
];
|
||||||
|
|
||||||
|
hostName = "aspi";
|
||||||
|
is-nixos = true;
|
||||||
|
terminal = "alacritty";
|
||||||
|
|
||||||
|
# ------- ----------
|
||||||
|
# | eDP-1 | | HDMI-A-1 |
|
||||||
|
# ------- ----------
|
||||||
|
monitors = [
|
||||||
|
{
|
||||||
|
name = "HDMI-A-1";
|
||||||
|
# width = 1680;
|
||||||
|
# height = 1050;
|
||||||
|
workspaces = [
|
||||||
|
"1"
|
||||||
|
"2"
|
||||||
|
"3"
|
||||||
|
"4"
|
||||||
|
"5"
|
||||||
|
];
|
||||||
|
primary = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "eDP-1";
|
||||||
|
# width = 1680;
|
||||||
|
# height = 1050;
|
||||||
|
workspaces = [
|
||||||
|
"6"
|
||||||
|
"7"
|
||||||
|
"8"
|
||||||
|
"9"
|
||||||
|
"10"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.alacritty = {
|
||||||
|
enable = true;
|
||||||
|
settings = {};
|
||||||
|
theme = "smoooooth";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
mise.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
doomRepoUrl = "https://github.com/doomemacs/doomemacs";
|
||||||
|
configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config";
|
||||||
|
in {
|
||||||
|
home.sessionPath = ["/home/julian/.config/emacs/bin"];
|
||||||
|
|
||||||
|
home.packages = with pkgs;
|
||||||
|
[
|
||||||
|
binutils # native-comp needs 'as', provided by this
|
||||||
|
|
||||||
|
## Doom dependencies
|
||||||
|
git
|
||||||
|
(ripgrep.override {withPCRE2 = true;})
|
||||||
|
|
||||||
|
## Optional dependencies
|
||||||
|
fd # faster projectile indexing
|
||||||
|
imagemagick # for image-dired
|
||||||
|
zstd # for undo-fu-session/undo-tree compression
|
||||||
|
|
||||||
|
## Module dependencies
|
||||||
|
(aspellWithDicts (
|
||||||
|
ds:
|
||||||
|
with ds; [
|
||||||
|
en
|
||||||
|
en-computers
|
||||||
|
en-science
|
||||||
|
de
|
||||||
|
]
|
||||||
|
))
|
||||||
|
|
||||||
|
hunspell
|
||||||
|
hunspellDicts.de_DE
|
||||||
|
hunspellDicts.en_US
|
||||||
|
|
||||||
|
sqlite
|
||||||
|
|
||||||
|
# Code formatters for use with doom emacs
|
||||||
|
nixfmt # nix
|
||||||
|
alejandra # nix
|
||||||
|
|
||||||
|
nixd # nix lsp
|
||||||
|
dockfmt # docker
|
||||||
|
google-java-format # java
|
||||||
|
black # python
|
||||||
|
rustfmt # rust
|
||||||
|
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
|
||||||
|
# Lsps for use with doom emacs
|
||||||
|
# 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;
|
||||||
|
|
||||||
|
home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||||
|
if [ ! -d "/home/julian/.config/emacs" ]; then
|
||||||
|
$DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs"
|
||||||
|
fi
|
||||||
|
if [ ! -d "/home/julian/.config/doom" ]; then
|
||||||
|
$DRY_RUN_CMD ${pkgs.git}/bin/git clone "${configRepoUrl}" "/home/julian/.config/doom"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; {
|
||||||
|
home.file = {
|
||||||
|
# ".config/starship.toml".source = ./starship.toml;
|
||||||
|
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
starship
|
||||||
|
lazygit
|
||||||
|
];
|
||||||
|
|
||||||
|
home.shellAliases = {
|
||||||
|
g = "lazygit";
|
||||||
|
ls = "ls --color";
|
||||||
|
la = "ls -Alh --color";
|
||||||
|
grep = "grep --color";
|
||||||
|
conf = "edit-config";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zoxide = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
interactiveShellInit = "set fish_greeting"; # Disable default greeting
|
||||||
|
|
||||||
|
functions = {
|
||||||
|
mkcd = ''
|
||||||
|
mkdir $argv
|
||||||
|
cd $argv
|
||||||
|
'';
|
||||||
|
run = ''
|
||||||
|
nix run --impure nixpkgs#"$argv[1]" -- $argv[2..-1]
|
||||||
|
'';
|
||||||
|
shell = ''
|
||||||
|
set args
|
||||||
|
for arg in $argv
|
||||||
|
set args $args nixpkgs#$arg
|
||||||
|
end
|
||||||
|
nix shell --impure $args
|
||||||
|
'';
|
||||||
|
fish_user_key_bindings = ''
|
||||||
|
bind ctrl-space 'zi; commandline -f repaint'
|
||||||
|
bind -M insert ctrl-space 'zi; commandline -f repaint'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
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-color-emoji
|
||||||
|
liberation_ttf
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
source-code-pro
|
||||||
|
source-sans
|
||||||
|
roboto
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
services.gammastep = {
|
||||||
|
enable = true;
|
||||||
|
provider = "geoclue2";
|
||||||
|
temperature = {
|
||||||
|
day = 6000;
|
||||||
|
night = 4600;
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
general.adjustment-method = "wayland";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# Apply lib.mkDefault to a whole attrset recursively, used for the noctalia config
|
||||||
|
mkDefaultsRec = value:
|
||||||
|
if builtins.isAttrs value
|
||||||
|
then lib.mapAttrs (_: mkDefaultsRec) value
|
||||||
|
else if builtins.isList value
|
||||||
|
then map mkDefaultsRec value
|
||||||
|
else lib.mkDefault value;
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
# inputs.hyprland.homeManagerModules.default
|
||||||
|
# ./waybar
|
||||||
|
# ./wofi
|
||||||
|
# ./mako
|
||||||
|
# ./hyprlock
|
||||||
|
./wlogout
|
||||||
|
# ../gammastep
|
||||||
|
|
||||||
|
# ./swayidle.nix
|
||||||
|
./swaylock.nix
|
||||||
|
./waypipe.nix
|
||||||
|
|
||||||
|
# ./hyprbars.nix
|
||||||
|
inputs.noctalia.homeModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
extraPortals = [pkgs.xdg-desktop-portal-wlr];
|
||||||
|
config.hyprland = {
|
||||||
|
default = [
|
||||||
|
"wlr"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.pointerCursor = {
|
||||||
|
hyprcursor.enable = true;
|
||||||
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Classic";
|
||||||
|
size = 24;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.imv.enable = true; # TODO: what is that
|
||||||
|
|
||||||
|
programs.noctalia-shell = {
|
||||||
|
enable = true;
|
||||||
|
# noctalia-shell ipc call state all | jq .settings | xclip
|
||||||
|
# mkDefaultsRec used so that stylix can overwrite style options
|
||||||
|
settings = mkDefaultsRec (builtins.fromJSON (builtins.readFile ./noctalia.json));
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
hyprpicker
|
||||||
|
hyprcursor
|
||||||
|
brightnessctl
|
||||||
|
playerctl
|
||||||
|
frajul.hyprshot-gui
|
||||||
|
frajul.wl-ocr
|
||||||
|
|
||||||
|
wf-recorder
|
||||||
|
wl-clipboard
|
||||||
|
|
||||||
|
(pkgs.writeShellScriptBin "toggle-screen-mirroring" (
|
||||||
|
builtins.readFile ./toggle-screen-mirroring.sh
|
||||||
|
))
|
||||||
|
|
||||||
|
(pkgs.writeShellScriptBin "correct-workspace-locations" (
|
||||||
|
lib.concatStringsSep "\n" (
|
||||||
|
builtins.concatLists (
|
||||||
|
map (
|
||||||
|
monitor:
|
||||||
|
map (ws: "hyprctl dispatch 'hl.dsp.workspace.move({workspace=\"${ws}\", monitor=\"${monitor.name}\"})'") monitor.workspaces
|
||||||
|
)
|
||||||
|
config.monitors
|
||||||
|
)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
];
|
||||||
|
|
||||||
|
services.cliphist = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
MOZ_ENABLE_WAYLAND = 1;
|
||||||
|
QT_QPA_PLATFORM = "wayland";
|
||||||
|
LIBSEAT_BACKEND = "logind";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.network-manager-applet.enable = true;
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
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-shell ipc call launcher toggle"
|
||||||
|
local calculator = "qalculate-gtk"
|
||||||
|
local browser = "firefox"
|
||||||
|
local editor = "emacs"
|
||||||
|
''
|
||||||
|
+ "-- Main config from `hyprland.lua`\n"
|
||||||
|
+ builtins.readFile ./hyprland.lua
|
||||||
|
+ "-- 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;
|
||||||
|
# Same as default, but stop graphical-session too
|
||||||
|
extraCommands = lib.mkBefore [
|
||||||
|
"systemctl --user stop graphical-session.target"
|
||||||
|
"systemctl --user start hyprland-session.target"
|
||||||
|
];
|
||||||
|
variables = [
|
||||||
|
"DISPLAY"
|
||||||
|
"HYPRLAND_INSTANCE_SIGNATURE"
|
||||||
|
"WAYLAND_DISPLAY"
|
||||||
|
"XDG_CURRENT_DESKTOP"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
xwayland.enable = true;
|
||||||
|
|
||||||
|
plugins = [
|
||||||
|
# hyprlandPlugins.hyprbars
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
outputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
getHostname = x: lib.last (lib.splitString "@" x);
|
||||||
|
# remoteColorschemes = lib.mapAttrs' (n: v: {
|
||||||
|
# name = getHostname n;
|
||||||
|
# value = v.config.colorscheme.rawColorscheme.colors.${config.colorscheme.mode};
|
||||||
|
# }) outputs.homeConfigurations;
|
||||||
|
rgb = color: "rgb(${lib.removePrefix "#" color})";
|
||||||
|
rgba = color: alpha: "rgba(${lib.removePrefix "#" color}${alpha})";
|
||||||
|
|
||||||
|
hyprbars =
|
||||||
|
(pkgs.hyprlandPlugins.hyprbars.override {
|
||||||
|
# Make sure it's using the same hyprland package as we are
|
||||||
|
hyprland = config.wayland.windowManager.hyprland.package;
|
||||||
|
}).overrideAttrs
|
||||||
|
(old: {
|
||||||
|
# Yeet the initialization notification (I hate it)
|
||||||
|
postPatch =
|
||||||
|
(old.postPatch or "")
|
||||||
|
+ ''
|
||||||
|
${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
in {
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
plugins = [hyprbars];
|
||||||
|
settings = {
|
||||||
|
"plugin:hyprbars" = {
|
||||||
|
bar_height = 25;
|
||||||
|
# bar_color = rgba config.colorscheme.colors.surface "dd";
|
||||||
|
# "col.text" = rgb config.colorscheme.colors.primary;
|
||||||
|
# bar_text_font = config.fontProfiles.regular.name;
|
||||||
|
# bar_text_size = config.fontProfiles.regular.size;
|
||||||
|
bar_part_of_window = true;
|
||||||
|
bar_precedence_over_border = true;
|
||||||
|
hyprbars-button = let
|
||||||
|
closeAction = "hyprctl dispatch killactive";
|
||||||
|
|
||||||
|
isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null'';
|
||||||
|
moveToSpecial = "hyprctl dispatch movetoworkspacesilent special";
|
||||||
|
moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')";
|
||||||
|
minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}";
|
||||||
|
|
||||||
|
maximizeAction = "hyprctl dispatch fullscreen 1";
|
||||||
|
in [
|
||||||
|
# Red close button
|
||||||
|
# "${rgb config.colorscheme.colors.red},12,,${closeAction}"
|
||||||
|
# # Yellow "minimize" (send to special workspace) button
|
||||||
|
# "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}"
|
||||||
|
# # Green "maximize" (fullscreen) button
|
||||||
|
# "${rgb config.colorscheme.colors.green},12,,${maximizeAction}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# windowrulev2 =
|
||||||
|
# [
|
||||||
|
# "plugin:hyprbars:bar_color ${rgba config.colorscheme.colors.primary "ee"}, focus:1"
|
||||||
|
# "plugin:hyprbars:title_color ${rgb config.colorscheme.colors.on_primary}, focus:1"
|
||||||
|
# ]
|
||||||
|
# ++ (lib.flatten (
|
||||||
|
# lib.mapAttrsToList (name: colors: [
|
||||||
|
# "plugin:hyprbars:bar_color ${rgba colors.primary_container "dd"}, title:\\[${name}\\].*"
|
||||||
|
# "plugin:hyprbars:title_color ${rgb colors.on_primary_container}, title:\\[${name}\\].*"
|
||||||
|
|
||||||
|
# "plugin:hyprbars:bar_color ${rgba colors.primary "ee"}, title:\\[${name}\\].*, focus:1"
|
||||||
|
# "plugin:hyprbars:title_color ${rgb colors.on_primary}, title:\\[${name}\\].*, focus:1"
|
||||||
|
# ]) remoteColorschemes
|
||||||
|
# ));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,348 @@
|
|||||||
|
------------------
|
||||||
|
---- MONITORS ----
|
||||||
|
------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = "auto",
|
||||||
|
mirror = "",
|
||||||
|
})
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
---- AUTOSTART ----
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
|
||||||
|
hl.on("hyprland.start", function()
|
||||||
|
-- hl.exec_cmd("waybar")
|
||||||
|
hl.exec_cmd("noctalia-shell")
|
||||||
|
hl.exec_cmd("firefox")
|
||||||
|
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
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
----- 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 = true,
|
||||||
|
},
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
disable_autoreload = true,
|
||||||
|
},
|
||||||
|
cursor = {
|
||||||
|
no_hardware_cursors = 1, -- disable hardware cursors to fix tearing on kardorf
|
||||||
|
},
|
||||||
|
render = {
|
||||||
|
direct_scanout = 1,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||||
|
hl.curve("easeOutQuint", { type = "bezier", points = { { 0.23, 1 }, { 0.32, 1 } } })
|
||||||
|
hl.curve("easeInOutCubic", { type = "bezier", points = { { 0.65, 0.05 }, { 0.36, 1 } } })
|
||||||
|
hl.curve("linear", { type = "bezier", points = { { 0, 0 }, { 1, 1 } } })
|
||||||
|
hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1 } } })
|
||||||
|
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } })
|
||||||
|
|
||||||
|
-- Default springs
|
||||||
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "global", enabled = false })
|
||||||
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
|
||||||
|
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
|
||||||
|
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
|
||||||
|
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
|
||||||
|
|
||||||
|
-- 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 = {
|
||||||
|
force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false, -- 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 .. " + 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,
|
||||||
|
})
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
programs.hyprlock.enable = true;
|
||||||
|
programs.hyprlock.settings = {
|
||||||
|
general = {
|
||||||
|
disable_loading_bar = true;
|
||||||
|
hide_cursor = true;
|
||||||
|
ignore_empty_input = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
input-field = [
|
||||||
|
{
|
||||||
|
size = "200, 50";
|
||||||
|
position = "0, -80";
|
||||||
|
monitor = "";
|
||||||
|
dots_center = true;
|
||||||
|
fade_on_empty = false;
|
||||||
|
outline_thickness = 5;
|
||||||
|
placeholder_text = "Password...";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [libnotify];
|
||||||
|
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,646 @@
|
|||||||
|
{
|
||||||
|
"settingsVersion": 59,
|
||||||
|
"bar": {
|
||||||
|
"barType": "simple",
|
||||||
|
"position": "bottom",
|
||||||
|
"monitors": [],
|
||||||
|
"density": "default",
|
||||||
|
"showOutline": false,
|
||||||
|
"showCapsule": false,
|
||||||
|
"capsuleOpacity": 1,
|
||||||
|
"capsuleColorKey": "none",
|
||||||
|
"widgetSpacing": 6,
|
||||||
|
"contentPadding": 2,
|
||||||
|
"fontScale": 1,
|
||||||
|
"enableExclusionZoneInset": false,
|
||||||
|
"backgroundOpacity": 1,
|
||||||
|
"useSeparateOpacity": false,
|
||||||
|
"marginVertical": 4,
|
||||||
|
"marginHorizontal": 4,
|
||||||
|
"frameThickness": 8,
|
||||||
|
"frameRadius": 12,
|
||||||
|
"outerCorners": false,
|
||||||
|
"hideOnOverview": false,
|
||||||
|
"displayMode": "always_visible",
|
||||||
|
"autoHideDelay": 500,
|
||||||
|
"autoShowDelay": 150,
|
||||||
|
"showOnWorkspaceSwitch": true,
|
||||||
|
"widgets": {
|
||||||
|
"left": [
|
||||||
|
{
|
||||||
|
"characterCount": 2,
|
||||||
|
"colorizeIcons": false,
|
||||||
|
"emptyColor": "secondary",
|
||||||
|
"enableScrollWheel": true,
|
||||||
|
"focusedColor": "primary",
|
||||||
|
"followFocusedScreen": false,
|
||||||
|
"fontWeight": "bold",
|
||||||
|
"groupedBorderOpacity": 1,
|
||||||
|
"hideUnoccupied": false,
|
||||||
|
"iconScale": 0.8,
|
||||||
|
"id": "Workspace",
|
||||||
|
"labelMode": "index",
|
||||||
|
"occupiedColor": "secondary",
|
||||||
|
"pillSize": 0.8,
|
||||||
|
"showApplications": false,
|
||||||
|
"showApplicationsHover": false,
|
||||||
|
"showBadge": true,
|
||||||
|
"showLabelsOnlyWhenOccupied": false,
|
||||||
|
"unfocusedIconsOpacity": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"center": [],
|
||||||
|
"right": [
|
||||||
|
{
|
||||||
|
"compactMode": false,
|
||||||
|
"diskPath": "/",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "SystemMonitor",
|
||||||
|
"showCpuCores": false,
|
||||||
|
"showCpuFreq": false,
|
||||||
|
"showCpuTemp": false,
|
||||||
|
"showCpuUsage": true,
|
||||||
|
"showDiskAvailable": true,
|
||||||
|
"showDiskUsage": true,
|
||||||
|
"showDiskUsageAsPercent": false,
|
||||||
|
"showGpuTemp": false,
|
||||||
|
"showLoadAverage": false,
|
||||||
|
"showMemoryAsPercent": true,
|
||||||
|
"showMemoryUsage": true,
|
||||||
|
"showNetworkStats": false,
|
||||||
|
"showSwapUsage": false,
|
||||||
|
"textColor": "none",
|
||||||
|
"useMonospaceFont": true,
|
||||||
|
"usePadding": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compactMode": false,
|
||||||
|
"diskPath": "/",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "SystemMonitor",
|
||||||
|
"showCpuCores": false,
|
||||||
|
"showCpuFreq": false,
|
||||||
|
"showCpuTemp": false,
|
||||||
|
"showCpuUsage": false,
|
||||||
|
"showDiskAvailable": false,
|
||||||
|
"showDiskUsage": false,
|
||||||
|
"showDiskUsageAsPercent": false,
|
||||||
|
"showGpuTemp": false,
|
||||||
|
"showLoadAverage": false,
|
||||||
|
"showMemoryAsPercent": false,
|
||||||
|
"showMemoryUsage": false,
|
||||||
|
"showNetworkStats": true,
|
||||||
|
"showSwapUsage": false,
|
||||||
|
"textColor": "none",
|
||||||
|
"useMonospaceFont": true,
|
||||||
|
"usePadding": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"displayMode": "alwaysShow",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "Volume",
|
||||||
|
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||||
|
"textColor": "none"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"deviceNativePath": "__default__",
|
||||||
|
"displayMode": "graphic-clean",
|
||||||
|
"hideIfIdle": false,
|
||||||
|
"hideIfNotDetected": true,
|
||||||
|
"id": "Battery",
|
||||||
|
"showNoctaliaPerformance": false,
|
||||||
|
"showPowerProfiles": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clockColor": "none",
|
||||||
|
"customFont": "",
|
||||||
|
"formatHorizontal": "ddd, dd.MM. HH:mm:ss",
|
||||||
|
"formatVertical": "HH mm - dd MM",
|
||||||
|
"id": "Clock",
|
||||||
|
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||||
|
"useCustomFont": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blacklist": [],
|
||||||
|
"chevronColor": "none",
|
||||||
|
"colorizeIcons": false,
|
||||||
|
"drawerEnabled": false,
|
||||||
|
"hidePassive": false,
|
||||||
|
"id": "Tray",
|
||||||
|
"pinned": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mouseWheelAction": "workspace",
|
||||||
|
"reverseScroll": false,
|
||||||
|
"mouseWheelWrap": true,
|
||||||
|
"middleClickAction": "launcherPanel",
|
||||||
|
"middleClickFollowMouse": false,
|
||||||
|
"middleClickCommand": "",
|
||||||
|
"rightClickAction": "controlCenter",
|
||||||
|
"rightClickFollowMouse": true,
|
||||||
|
"rightClickCommand": "",
|
||||||
|
"screenOverrides": []
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"avatarImage": "/home/julian/.face",
|
||||||
|
"dimmerOpacity": 0.2,
|
||||||
|
"showScreenCorners": false,
|
||||||
|
"forceBlackScreenCorners": false,
|
||||||
|
"scaleRatio": 1,
|
||||||
|
"radiusRatio": 1,
|
||||||
|
"iRadiusRatio": 1,
|
||||||
|
"boxRadiusRatio": 1,
|
||||||
|
"screenRadiusRatio": 1,
|
||||||
|
"animationSpeed": 1,
|
||||||
|
"animationDisabled": false,
|
||||||
|
"compactLockScreen": false,
|
||||||
|
"lockScreenAnimations": false,
|
||||||
|
"lockOnSuspend": true,
|
||||||
|
"showSessionButtonsOnLockScreen": true,
|
||||||
|
"showHibernateOnLockScreen": false,
|
||||||
|
"enableLockScreenMediaControls": false,
|
||||||
|
"enableShadows": true,
|
||||||
|
"enableBlurBehind": true,
|
||||||
|
"shadowDirection": "bottom_right",
|
||||||
|
"shadowOffsetX": 2,
|
||||||
|
"shadowOffsetY": 3,
|
||||||
|
"language": "",
|
||||||
|
"allowPanelsOnScreenWithoutBar": true,
|
||||||
|
"showChangelogOnStartup": true,
|
||||||
|
"telemetryEnabled": false,
|
||||||
|
"enableLockScreenCountdown": false,
|
||||||
|
"lockScreenCountdownDuration": 10000,
|
||||||
|
"autoStartAuth": false,
|
||||||
|
"allowPasswordWithFprintd": false,
|
||||||
|
"clockStyle": "custom",
|
||||||
|
"clockFormat": "hh\\nmm",
|
||||||
|
"passwordChars": false,
|
||||||
|
"lockScreenMonitors": [],
|
||||||
|
"lockScreenBlur": 0,
|
||||||
|
"lockScreenTint": 0,
|
||||||
|
"keybinds": {
|
||||||
|
"keyUp": [
|
||||||
|
"Up"
|
||||||
|
],
|
||||||
|
"keyDown": [
|
||||||
|
"Down"
|
||||||
|
],
|
||||||
|
"keyLeft": [
|
||||||
|
"Left"
|
||||||
|
],
|
||||||
|
"keyRight": [
|
||||||
|
"Right"
|
||||||
|
],
|
||||||
|
"keyEnter": [
|
||||||
|
"Return",
|
||||||
|
"Enter"
|
||||||
|
],
|
||||||
|
"keyEscape": [
|
||||||
|
"Esc"
|
||||||
|
],
|
||||||
|
"keyRemove": [
|
||||||
|
"Del"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"reverseScroll": false,
|
||||||
|
"smoothScrollEnabled": true
|
||||||
|
},
|
||||||
|
"ui": {
|
||||||
|
"fontDefault": "DejaVu Sans",
|
||||||
|
"fontFixed": "DejaVu Sans Mono",
|
||||||
|
"fontDefaultScale": 1,
|
||||||
|
"fontFixedScale": 1,
|
||||||
|
"tooltipsEnabled": true,
|
||||||
|
"scrollbarAlwaysVisible": true,
|
||||||
|
"boxBorderEnabled": false,
|
||||||
|
"panelBackgroundOpacity": 1,
|
||||||
|
"translucentWidgets": false,
|
||||||
|
"panelsAttachedToBar": true,
|
||||||
|
"settingsPanelMode": "attached",
|
||||||
|
"settingsPanelSideBarCardStyle": false
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"name": "",
|
||||||
|
"weatherEnabled": true,
|
||||||
|
"weatherShowEffects": true,
|
||||||
|
"weatherTaliaMascotAlways": false,
|
||||||
|
"useFahrenheit": false,
|
||||||
|
"use12hourFormat": false,
|
||||||
|
"showWeekNumberInCalendar": false,
|
||||||
|
"showCalendarEvents": true,
|
||||||
|
"showCalendarWeather": true,
|
||||||
|
"analogClockInCalendar": false,
|
||||||
|
"firstDayOfWeek": -1,
|
||||||
|
"hideWeatherTimezone": false,
|
||||||
|
"hideWeatherCityName": false,
|
||||||
|
"autoLocate": false
|
||||||
|
},
|
||||||
|
"calendar": {
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "calendar-header-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "calendar-month-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "weather-card"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"wallpaper": {
|
||||||
|
"enabled": false,
|
||||||
|
"overviewEnabled": false,
|
||||||
|
"directory": "/home/julian/Pictures/Wallpapers",
|
||||||
|
"monitorDirectories": [],
|
||||||
|
"enableMultiMonitorDirectories": false,
|
||||||
|
"showHiddenFiles": false,
|
||||||
|
"viewMode": "single",
|
||||||
|
"setWallpaperOnAllMonitors": true,
|
||||||
|
"linkLightAndDarkWallpapers": true,
|
||||||
|
"fillMode": "crop",
|
||||||
|
"fillColor": "#000000",
|
||||||
|
"useSolidColor": false,
|
||||||
|
"solidColor": "#1a1a2e",
|
||||||
|
"automationEnabled": false,
|
||||||
|
"wallpaperChangeMode": "random",
|
||||||
|
"randomIntervalSec": 300,
|
||||||
|
"transitionDuration": 1500,
|
||||||
|
"transitionType": [
|
||||||
|
"fade",
|
||||||
|
"disc",
|
||||||
|
"stripes",
|
||||||
|
"wipe",
|
||||||
|
"pixelate",
|
||||||
|
"honeycomb"
|
||||||
|
],
|
||||||
|
"skipStartupTransition": false,
|
||||||
|
"transitionEdgeSmoothness": 0.05,
|
||||||
|
"panelPosition": "follow_bar",
|
||||||
|
"hideWallpaperFilenames": false,
|
||||||
|
"useOriginalImages": false,
|
||||||
|
"overviewBlur": 0.4,
|
||||||
|
"overviewTint": 0.6,
|
||||||
|
"useWallhaven": false,
|
||||||
|
"wallhavenQuery": "",
|
||||||
|
"wallhavenSorting": "relevance",
|
||||||
|
"wallhavenOrder": "desc",
|
||||||
|
"wallhavenCategories": "111",
|
||||||
|
"wallhavenPurity": "100",
|
||||||
|
"wallhavenRatios": "",
|
||||||
|
"wallhavenApiKey": "",
|
||||||
|
"wallhavenResolutionMode": "atleast",
|
||||||
|
"wallhavenResolutionWidth": "",
|
||||||
|
"wallhavenResolutionHeight": "",
|
||||||
|
"sortOrder": "name",
|
||||||
|
"favorites": []
|
||||||
|
},
|
||||||
|
"appLauncher": {
|
||||||
|
"enableClipboardHistory": false,
|
||||||
|
"autoPasteClipboard": false,
|
||||||
|
"enableClipPreview": true,
|
||||||
|
"clipboardWrapText": true,
|
||||||
|
"enableClipboardSmartIcons": true,
|
||||||
|
"enableClipboardChips": true,
|
||||||
|
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
|
||||||
|
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
|
||||||
|
"position": "center",
|
||||||
|
"pinnedApps": [],
|
||||||
|
"sortByMostUsed": true,
|
||||||
|
"terminalCommand": "alacritty -e",
|
||||||
|
"customLaunchPrefixEnabled": false,
|
||||||
|
"customLaunchPrefix": "",
|
||||||
|
"viewMode": "list",
|
||||||
|
"showCategories": true,
|
||||||
|
"iconMode": "tabler",
|
||||||
|
"showIconBackground": false,
|
||||||
|
"enableSettingsSearch": true,
|
||||||
|
"enableWindowsSearch": true,
|
||||||
|
"enableSessionSearch": true,
|
||||||
|
"ignoreMouseInput": false,
|
||||||
|
"screenshotAnnotationTool": "",
|
||||||
|
"overviewLayer": false,
|
||||||
|
"density": "default"
|
||||||
|
},
|
||||||
|
"controlCenter": {
|
||||||
|
"position": "close_to_bar_button",
|
||||||
|
"diskPath": "/",
|
||||||
|
"shortcuts": {
|
||||||
|
"left": [
|
||||||
|
{
|
||||||
|
"id": "Network"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Bluetooth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "WallpaperSelector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "NoctaliaPerformance"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"right": [
|
||||||
|
{
|
||||||
|
"id": "Notifications"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "PowerProfile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "KeepAwake"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "NightLight"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "profile-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "shortcuts-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "audio-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": false,
|
||||||
|
"id": "brightness-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "weather-card"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": false,
|
||||||
|
"id": "media-sysmon-card"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"systemMonitor": {
|
||||||
|
"cpuWarningThreshold": 80,
|
||||||
|
"cpuCriticalThreshold": 90,
|
||||||
|
"tempWarningThreshold": 80,
|
||||||
|
"tempCriticalThreshold": 90,
|
||||||
|
"gpuWarningThreshold": 80,
|
||||||
|
"gpuCriticalThreshold": 90,
|
||||||
|
"memWarningThreshold": 80,
|
||||||
|
"memCriticalThreshold": 90,
|
||||||
|
"swapWarningThreshold": 80,
|
||||||
|
"swapCriticalThreshold": 90,
|
||||||
|
"diskWarningThreshold": 80,
|
||||||
|
"diskCriticalThreshold": 90,
|
||||||
|
"diskAvailWarningThreshold": 20,
|
||||||
|
"diskAvailCriticalThreshold": 10,
|
||||||
|
"batteryWarningThreshold": 20,
|
||||||
|
"batteryCriticalThreshold": 5,
|
||||||
|
"enableDgpuMonitoring": false,
|
||||||
|
"useCustomColors": false,
|
||||||
|
"warningColor": "",
|
||||||
|
"criticalColor": "",
|
||||||
|
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
|
||||||
|
},
|
||||||
|
"noctaliaPerformance": {
|
||||||
|
"disableWallpaper": true,
|
||||||
|
"disableDesktopWidgets": true
|
||||||
|
},
|
||||||
|
"dock": {
|
||||||
|
"enabled": false,
|
||||||
|
"position": "bottom",
|
||||||
|
"displayMode": "auto_hide",
|
||||||
|
"dockType": "floating",
|
||||||
|
"backgroundOpacity": 1,
|
||||||
|
"floatingRatio": 1,
|
||||||
|
"size": 1,
|
||||||
|
"onlySameOutput": true,
|
||||||
|
"monitors": [],
|
||||||
|
"pinnedApps": [],
|
||||||
|
"colorizeIcons": false,
|
||||||
|
"showLauncherIcon": false,
|
||||||
|
"launcherPosition": "end",
|
||||||
|
"launcherUseDistroLogo": false,
|
||||||
|
"launcherIcon": "",
|
||||||
|
"launcherIconColor": "none",
|
||||||
|
"pinnedStatic": false,
|
||||||
|
"inactiveIndicators": false,
|
||||||
|
"groupApps": false,
|
||||||
|
"groupContextMenuMode": "extended",
|
||||||
|
"groupClickAction": "cycle",
|
||||||
|
"groupIndicatorStyle": "dots",
|
||||||
|
"deadOpacity": 0.6,
|
||||||
|
"animationSpeed": 1,
|
||||||
|
"sitOnFrame": false,
|
||||||
|
"showDockIndicator": false,
|
||||||
|
"indicatorThickness": 3,
|
||||||
|
"indicatorColor": "primary",
|
||||||
|
"indicatorOpacity": 0.6
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"bluetoothRssiPollingEnabled": false,
|
||||||
|
"bluetoothRssiPollIntervalMs": 60000,
|
||||||
|
"networkPanelView": "wifi",
|
||||||
|
"wifiDetailsViewMode": "grid",
|
||||||
|
"bluetoothDetailsViewMode": "grid",
|
||||||
|
"bluetoothHideUnnamedDevices": false,
|
||||||
|
"disableDiscoverability": false,
|
||||||
|
"bluetoothAutoConnect": true
|
||||||
|
},
|
||||||
|
"sessionMenu": {
|
||||||
|
"enableCountdown": false,
|
||||||
|
"countdownDuration": 10000,
|
||||||
|
"position": "center",
|
||||||
|
"showHeader": true,
|
||||||
|
"showKeybinds": true,
|
||||||
|
"largeButtonsStyle": false,
|
||||||
|
"largeButtonsLayout": "single-row",
|
||||||
|
"powerOptions": [
|
||||||
|
{
|
||||||
|
"action": "lock",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": true,
|
||||||
|
"keybind": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "suspend",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": false,
|
||||||
|
"keybind": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "hibernate",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": false,
|
||||||
|
"keybind": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "reboot",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": true,
|
||||||
|
"keybind": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "logout",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": true,
|
||||||
|
"keybind": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "shutdown",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": true,
|
||||||
|
"keybind": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "rebootToUefi",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": false,
|
||||||
|
"keybind": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "userspaceReboot",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": false,
|
||||||
|
"keybind": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"enabled": false,
|
||||||
|
"enableMarkdown": false,
|
||||||
|
"density": "default",
|
||||||
|
"monitors": [],
|
||||||
|
"location": "top_right",
|
||||||
|
"overlayLayer": true,
|
||||||
|
"backgroundOpacity": 1,
|
||||||
|
"respectExpireTimeout": false,
|
||||||
|
"lowUrgencyDuration": 3,
|
||||||
|
"normalUrgencyDuration": 8,
|
||||||
|
"criticalUrgencyDuration": 15,
|
||||||
|
"clearDismissed": true,
|
||||||
|
"saveToHistory": {
|
||||||
|
"low": true,
|
||||||
|
"normal": true,
|
||||||
|
"critical": true
|
||||||
|
},
|
||||||
|
"sounds": {
|
||||||
|
"enabled": false,
|
||||||
|
"volume": 0.5,
|
||||||
|
"separateSounds": false,
|
||||||
|
"criticalSoundFile": "",
|
||||||
|
"normalSoundFile": "",
|
||||||
|
"lowSoundFile": "",
|
||||||
|
"excludedApps": "discord,firefox,chrome,chromium,edge"
|
||||||
|
},
|
||||||
|
"enableMediaToast": false,
|
||||||
|
"enableKeyboardLayoutToast": true,
|
||||||
|
"enableBatteryToast": true
|
||||||
|
},
|
||||||
|
"osd": {
|
||||||
|
"enabled": true,
|
||||||
|
"location": "top_right",
|
||||||
|
"autoHideMs": 2000,
|
||||||
|
"overlayLayer": true,
|
||||||
|
"backgroundOpacity": 1,
|
||||||
|
"enabledTypes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"monitors": []
|
||||||
|
},
|
||||||
|
"audio": {
|
||||||
|
"volumeStep": 5,
|
||||||
|
"volumeOverdrive": false,
|
||||||
|
"spectrumFrameRate": 30,
|
||||||
|
"visualizerType": "linear",
|
||||||
|
"spectrumMirrored": true,
|
||||||
|
"mprisBlacklist": [],
|
||||||
|
"preferredPlayer": "",
|
||||||
|
"volumeFeedback": false,
|
||||||
|
"volumeFeedbackSoundFile": ""
|
||||||
|
},
|
||||||
|
"brightness": {
|
||||||
|
"brightnessStep": 5,
|
||||||
|
"enforceMinimum": true,
|
||||||
|
"enableDdcSupport": false,
|
||||||
|
"backlightDeviceMappings": []
|
||||||
|
},
|
||||||
|
"colorSchemes": {
|
||||||
|
"useWallpaperColors": false,
|
||||||
|
"predefinedScheme": "Noctalia (default)",
|
||||||
|
"darkMode": true,
|
||||||
|
"schedulingMode": "off",
|
||||||
|
"manualSunrise": "06:30",
|
||||||
|
"manualSunset": "18:30",
|
||||||
|
"generationMethod": "tonal-spot",
|
||||||
|
"monitorForColors": "",
|
||||||
|
"syncGsettings": true
|
||||||
|
},
|
||||||
|
"templates": {
|
||||||
|
"activeTemplates": [],
|
||||||
|
"enableUserTheming": false
|
||||||
|
},
|
||||||
|
"nightLight": {
|
||||||
|
"enabled": true,
|
||||||
|
"forced": false,
|
||||||
|
"autoSchedule": true,
|
||||||
|
"nightTemp": "4000",
|
||||||
|
"dayTemp": "6500",
|
||||||
|
"manualSunrise": "06:30",
|
||||||
|
"manualSunset": "18:30"
|
||||||
|
},
|
||||||
|
"hooks": {
|
||||||
|
"enabled": false,
|
||||||
|
"wallpaperChange": "",
|
||||||
|
"darkModeChange": "",
|
||||||
|
"screenLock": "",
|
||||||
|
"screenUnlock": "",
|
||||||
|
"performanceModeEnabled": "",
|
||||||
|
"performanceModeDisabled": "",
|
||||||
|
"startup": "",
|
||||||
|
"session": "",
|
||||||
|
"colorGeneration": ""
|
||||||
|
},
|
||||||
|
"plugins": {
|
||||||
|
"autoUpdate": false,
|
||||||
|
"notifyUpdates": true
|
||||||
|
},
|
||||||
|
"idle": {
|
||||||
|
"enabled": false,
|
||||||
|
"screenOffTimeout": 600,
|
||||||
|
"lockTimeout": 660,
|
||||||
|
"suspendTimeout": 1800,
|
||||||
|
"fadeDuration": 5,
|
||||||
|
"screenOffCommand": "",
|
||||||
|
"lockCommand": "",
|
||||||
|
"suspendCommand": "",
|
||||||
|
"resumeScreenOffCommand": "",
|
||||||
|
"resumeLockCommand": "",
|
||||||
|
"resumeSuspendCommand": "",
|
||||||
|
"customCommands": "[]"
|
||||||
|
},
|
||||||
|
"desktopWidgets": {
|
||||||
|
"enabled": false,
|
||||||
|
"overviewEnabled": true,
|
||||||
|
"gridSnap": false,
|
||||||
|
"gridSnapScale": false,
|
||||||
|
"monitorWidgets": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
|
||||||
|
pgrep = "${pkgs.procps}/bin/pgrep";
|
||||||
|
pactl = "${pkgs.pulseaudio}/bin/pactl";
|
||||||
|
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
|
||||||
|
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
|
||||||
|
|
||||||
|
isLocked = "${pgrep} -x ${swaylock}";
|
||||||
|
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
|
||||||
|
|
||||||
|
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
|
||||||
|
afterLockTimeout = {
|
||||||
|
timeout,
|
||||||
|
command,
|
||||||
|
resumeCommand ? null,
|
||||||
|
}: [
|
||||||
|
{
|
||||||
|
timeout = lockTime + timeout;
|
||||||
|
inherit command resumeCommand;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "${isLocked} && ${command}";
|
||||||
|
inherit resumeCommand timeout;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
services.swayidle = {
|
||||||
|
enable = true;
|
||||||
|
systemdTargets = ["graphical-session.target"];
|
||||||
|
timeouts =
|
||||||
|
# Lock screen
|
||||||
|
[
|
||||||
|
{
|
||||||
|
timeout = lockTime;
|
||||||
|
command = "${swaylock} --daemonize --grace 15";
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++
|
||||||
|
# Turn off displays (hyprland)
|
||||||
|
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
|
||||||
|
timeout = 300;
|
||||||
|
command = "${hyprctl} dispatch dpms off";
|
||||||
|
resumeCommand = "${hyprctl} dispatch dpms on";
|
||||||
|
}))
|
||||||
|
++
|
||||||
|
# Turn off displays (sway)
|
||||||
|
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
|
||||||
|
timeout = 300;
|
||||||
|
command = "${swaymsg} 'output * dpms off'";
|
||||||
|
resumeCommand = "${swaymsg} 'output * dpms on'";
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
programs.swaylock = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
ignore-empty-password = true;
|
||||||
|
indicator-idle-visible = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
|
||||||
|
|
||||||
|
# TODO: Detect these instead of hardcoding them
|
||||||
|
INTERNAL_MONITOR="eDP-1"
|
||||||
|
EXTERNAL_MONITOR="HDMI-A-1"
|
||||||
|
|
||||||
|
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .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
-4
@@ -12,7 +12,14 @@
|
|||||||
|
|
||||||
"modules-center": [],
|
"modules-center": [],
|
||||||
|
|
||||||
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
"modules-right": ["idle_inhibitor", "custom/nixos-update", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||||
|
|
||||||
|
"custom/nixos-update": {
|
||||||
|
"exec": "frajul-auto-upgrade-status",
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 2,
|
||||||
|
"on-click-right": "frajul-auto-upgrade-toggle"
|
||||||
|
},
|
||||||
|
|
||||||
"hyprland/workspaces": {
|
"hyprland/workspaces": {
|
||||||
"on-scroll-up": "hyprctl dispatch workspace m+1",
|
"on-scroll-up": "hyprctl dispatch workspace m+1",
|
||||||
@@ -35,6 +42,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
|
"start-activated": true,
|
||||||
"format": "{icon}",
|
"format": "{icon}",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"activated": "",
|
"activated": "",
|
||||||
@@ -75,9 +83,9 @@
|
|||||||
"warning": 30,
|
"warning": 30,
|
||||||
"critical": 15
|
"critical": 15
|
||||||
},
|
},
|
||||||
"format": "{icon} {capacity}% ({time})",
|
"format": "{icon} {capacity}%",
|
||||||
"format-charging": " {capacity}% ({time})",
|
"format-charging": " {capacity}%",
|
||||||
"format-plugged": " {capacity}% ({time})",
|
"format-plugged": " {capacity}%",
|
||||||
"format-full": "{icon} ",
|
"format-full": "{icon} ",
|
||||||
"format-icons": ["", "", "", "", ""]
|
"format-icons": ["", "", "", "", ""]
|
||||||
},
|
},
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{config, ...}: let
|
||||||
|
palette = config.lib.stylix.colors;
|
||||||
|
in {
|
||||||
|
stylix.targets.waybar.enable = false;
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
# systemd.enable = true;
|
||||||
|
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile."waybar/style.css".source = ./style.css;
|
||||||
|
xdg.configFile."waybar/theme.css".text = ''
|
||||||
|
/*
|
||||||
|
bg - background
|
||||||
|
fg - foreground
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Main Colors */
|
||||||
|
@define-color background #${palette.base00};
|
||||||
|
@define-color foreground #${palette.base05};
|
||||||
|
|
||||||
|
/* Workspace Button Colors */
|
||||||
|
@define-color hover-bg #${palette.base01};
|
||||||
|
@define-color hover-fg #${palette.base05};
|
||||||
|
@define-color active-bg #${palette.base02};
|
||||||
|
@define-color active-fg #${palette.base0A};
|
||||||
|
@define-color urgent-bg #${palette.base08};
|
||||||
|
@define-color urgent-fg #${palette.base00};
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = [pkgs.waypipe];
|
||||||
|
systemd.user.services = {
|
||||||
|
waypipe-client = {
|
||||||
|
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
|
||||||
|
Service = {
|
||||||
|
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
|
||||||
|
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/client.sock client";
|
||||||
|
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/client.sock";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["graphical-session.target"];
|
||||||
|
};
|
||||||
|
waypipe-server = {
|
||||||
|
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
|
||||||
|
Service = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
|
||||||
|
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/server.sock --title-prefix '[%H] ' --login-shell --display wayland-waypipe server -- ${lib.getExe' pkgs.coreutils "sleep"} infinity";
|
||||||
|
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/server.sock %t/wayland-waypipe";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["default.target"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [wlogout];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [wofi];
|
||||||
|
|
||||||
|
xdg.configFile."wofi/config".source = ./config;
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [../rofi];
|
||||||
|
|
||||||
|
services.dunst.enable = true;
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
i3status-rust = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nitrogen
|
||||||
|
xfce.xfce4-screenshooter
|
||||||
|
pulseaudio # For pactl commands
|
||||||
|
];
|
||||||
|
xsession.enable = true; # Give gui programs access to sessionVariables
|
||||||
|
# Prevent screen from going blank (check these settings with `xset q`)
|
||||||
|
# And disable bell sound (b)
|
||||||
|
xsession.initExtra = ''
|
||||||
|
${pkgs.xset}/bin/xset s off
|
||||||
|
${pkgs.xset}/bin/xset -dpms
|
||||||
|
${pkgs.xset}/bin/xset b off
|
||||||
|
'';
|
||||||
|
xsession.windowManager.i3 = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.i3-gaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
xsession.importedVariables = [];
|
||||||
|
|
||||||
|
# Overwrite default home-manager config file
|
||||||
|
xdg.configFile."i3/config".source = lib.mkForce (
|
||||||
|
if config.hostName == "kardorf"
|
||||||
|
then ./i3/config-kardorf
|
||||||
|
else ./i3/config
|
||||||
|
);
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/i3/scripts" = {
|
||||||
|
source = ./i3/scripts;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
".config/i3/workspace-messaging.json".source = ./i3/workspace-chat-element-tele.json;
|
||||||
|
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = ["/home/julian/.config/i3/scripts"];
|
||||||
|
}
|
||||||
@@ -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
|
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||||
|
|
||||||
# Monitor config
|
# Monitor config
|
||||||
set $monitor_left "DVI-D-0"
|
set $monitor_left "DVI-D-1"
|
||||||
set $monitor_right "DVI-D-1"
|
set $monitor_right "DVI-D-2"
|
||||||
|
|
||||||
workspace $ws1 output $monitor_left
|
workspace $ws1 output $monitor_left
|
||||||
workspace $ws2 output $monitor_left
|
workspace $ws2 output $monitor_left
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
shellIntegration.enableFishIntegration = true;
|
||||||
|
themeFile = "gruvbox-dark";
|
||||||
|
settings = {
|
||||||
|
enable_audio_bell = false;
|
||||||
|
confirm_os_window_close = 0; # no ask on quit
|
||||||
|
};
|
||||||
|
font = {
|
||||||
|
package = pkgs.dejavu_fonts;
|
||||||
|
name = "DejaVu Sans";
|
||||||
|
size = 12;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# home.shellAliases = {
|
||||||
|
# ssh = "kitten ssh"; # Copy kitten terminfo to remote
|
||||||
|
# };
|
||||||
|
|
||||||
|
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "kitty") "kitty";
|
||||||
|
}
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [inputs.nixvim.homeModules.nixvim];
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
EDITOR = "nvim";
|
||||||
|
VISUAL = "nvim";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
git
|
||||||
|
gnumake
|
||||||
|
gcc
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
stylua
|
||||||
|
black
|
||||||
|
nixfmt # nixfmt
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.nixvim = {
|
||||||
|
enable = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
|
||||||
|
colorschemes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
settings.flavour = "mocha";
|
||||||
|
};
|
||||||
|
|
||||||
|
globals.mapleader = " ";
|
||||||
|
opts = {
|
||||||
|
number = false;
|
||||||
|
relativenumber = false;
|
||||||
|
ignorecase = true;
|
||||||
|
smartcase = true;
|
||||||
|
};
|
||||||
|
clipboard.register = "unnamedplus"; # Use system clipboard
|
||||||
|
|
||||||
|
keymaps = [
|
||||||
|
{
|
||||||
|
action = "<cmd>Telescope live_grep<cr>";
|
||||||
|
key = "<leader>/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "<cmd>Telescope find_files<cr>";
|
||||||
|
key = "<leader><space>";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "<cmd>Telescope file_browser path=%:p:h<cr>";
|
||||||
|
key = "<leader>.";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "<cmd>Neogit<cr>";
|
||||||
|
key = "<leader>gg";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "<C-s>";
|
||||||
|
action = "<esc><cmd>lua require('conform').format()<cr><cmd>write<cr>";
|
||||||
|
mode = [
|
||||||
|
"i"
|
||||||
|
"x"
|
||||||
|
"n"
|
||||||
|
"s"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
plugins = {
|
||||||
|
lualine.enable = true;
|
||||||
|
commentary.enable = true;
|
||||||
|
which-key.enable = true;
|
||||||
|
treesitter.enable = true; # enables all grammar packages
|
||||||
|
neogit.enable = true; # like magit
|
||||||
|
trouble.enable = true;
|
||||||
|
web-devicons.enable = true;
|
||||||
|
orgmode.enable = true; # org-mode support
|
||||||
|
|
||||||
|
# Shows file trees
|
||||||
|
oil = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
view_options.show_hidden = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Code formatting
|
||||||
|
conform-nvim = {
|
||||||
|
enable = true;
|
||||||
|
settings.formatters_by_ft = {
|
||||||
|
lua = ["stylua"];
|
||||||
|
python = ["black"];
|
||||||
|
nix = ["nixfmt"];
|
||||||
|
};
|
||||||
|
# extraOptions = {
|
||||||
|
# default_format_opts.lsp_format = "fallback";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
# autocomplete
|
||||||
|
cmp = {
|
||||||
|
enable = true;
|
||||||
|
autoEnableSources = true;
|
||||||
|
settings.sources = [
|
||||||
|
{name = "nvim_lsp";}
|
||||||
|
{name = "path";}
|
||||||
|
{name = "buffer";}
|
||||||
|
];
|
||||||
|
settings.mapping = {
|
||||||
|
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
|
||||||
|
"<C-j>" = "cmp.mapping.select_next_item()";
|
||||||
|
"<C-k>" = "cmp.mapping.select_prev_item()";
|
||||||
|
"<C-e>" = "cmp.mapping.abort()";
|
||||||
|
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Fuzzy finder
|
||||||
|
telescope = {
|
||||||
|
enable = true;
|
||||||
|
settings.defaults.mappings = {
|
||||||
|
i = {
|
||||||
|
"<C-j>".__raw = "require('telescope.actions').move_selection_next";
|
||||||
|
"<C-k>".__raw = "require('telescope.actions').move_selection_previous";
|
||||||
|
"<tab>".__raw = "require('telescope.actions').select_default";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extensions = {
|
||||||
|
fzf-native.enable = true;
|
||||||
|
file-browser = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
hidden = true; # show hidden files
|
||||||
|
follow_symlinks = true;
|
||||||
|
no_ignore = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = true; # includes lsp-config, default settings for the lsps
|
||||||
|
servers = {
|
||||||
|
rust_analyzer = {
|
||||||
|
enable = true;
|
||||||
|
installCargo = true;
|
||||||
|
installRustc = 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
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.sessionVariables = {
|
||||||
|
NH_FLAKE = "/home/julian/.dotfiles";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.shellAliases = {
|
||||||
|
"os" = "nh os switch";
|
||||||
|
"hs" = "nh home switch";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [nh];
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# this would need you to config rofi using home-manager
|
||||||
|
# programs.rofi = { enable = true; };
|
||||||
|
|
||||||
|
home.packages = with pkgs; [rofi];
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/rofi/config.rasi".source = ./config.rasi;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
bat
|
||||||
|
dust # Like du tree but better
|
||||||
|
fd # better find
|
||||||
|
fdupes # find and delete duplicate files
|
||||||
|
ffmpeg
|
||||||
|
findutils # locate
|
||||||
|
fzf # Fuzzy finder
|
||||||
|
ghostscript # needed for imagemagick with pdfs
|
||||||
|
imagemagick
|
||||||
|
git
|
||||||
|
gnupg
|
||||||
|
htop
|
||||||
|
jq # Command line JSON processor
|
||||||
|
killall
|
||||||
|
languagetool # Grammar checker
|
||||||
|
lazygit # Git client
|
||||||
|
links2 # Tui web-browser
|
||||||
|
lnav # log analyzing tool
|
||||||
|
mc # Tui file browser
|
||||||
|
nmap
|
||||||
|
p7zip # unzip 7zip archives
|
||||||
|
parted
|
||||||
|
pciutils # lspci
|
||||||
|
poppler-utils # Pdf utils including pdfimages
|
||||||
|
libqalculate # Nice tui calculator (qalc)
|
||||||
|
ripgrep # better grep
|
||||||
|
rnr # renaming tool
|
||||||
|
sage # Maths notebooks
|
||||||
|
tealdeer # tldr
|
||||||
|
topgrade # System update
|
||||||
|
tree
|
||||||
|
unetbootin # TODO
|
||||||
|
unixtools.procps # TODO
|
||||||
|
unzip
|
||||||
|
usbutils # lsusb
|
||||||
|
wget
|
||||||
|
wireguard-tools # wg-quick
|
||||||
|
xkill
|
||||||
|
zip
|
||||||
|
dig
|
||||||
|
|
||||||
|
## My scripts
|
||||||
|
frajul.edit-config
|
||||||
|
frajul.lntocp
|
||||||
|
frajul.sos
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
# imports = [./stylix.nix];
|
||||||
|
|
||||||
|
services.blueman-applet.enable = true;
|
||||||
|
services.nextcloud-client.enable = true;
|
||||||
|
services.nextcloud-client.startInBackground = true;
|
||||||
|
services.network-manager-applet.enable = true;
|
||||||
|
|
||||||
|
services.syncthing.tray.enable = true;
|
||||||
|
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||||
|
|
||||||
|
gtk.gtk4.theme = null; # Fix evaluation warning since using old home manager version
|
||||||
|
|
||||||
|
programs.chromium = {
|
||||||
|
enable = true;
|
||||||
|
extensions = [
|
||||||
|
# Tampermonkey
|
||||||
|
{id = "dhdgffkkebhmkfjojejmpbldmpobfkfo";}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
arandr
|
||||||
|
calibre # ebook manager and viewer
|
||||||
|
# digikam
|
||||||
|
discord
|
||||||
|
discord-ptb # in case discord updates take their time
|
||||||
|
# dvdisaster
|
||||||
|
# element-desktop
|
||||||
|
# rocketchat-desktop
|
||||||
|
thunderbird
|
||||||
|
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, already available as feature
|
||||||
|
libnotify
|
||||||
|
libreoffice
|
||||||
|
engrampa
|
||||||
|
nomacs # Image viewer
|
||||||
|
kdePackages.okular # Pdf reader with many features, good for commenting documents
|
||||||
|
pavucontrol
|
||||||
|
pdfsam-basic # Split, merge, etc for pdfs
|
||||||
|
qalculate-gtk # Nice gui calculator
|
||||||
|
qpdfview
|
||||||
|
# qutebrowser
|
||||||
|
# realvnc-vnc-viewer
|
||||||
|
# rpi-imager # make isos
|
||||||
|
# rustdesk
|
||||||
|
tor-browser
|
||||||
|
rusty-path-of-building # Path of Building for poe1 and poe2
|
||||||
|
vlc
|
||||||
|
wineWow64Packages.stable # 32-bit and 64-bit wine
|
||||||
|
winetricks
|
||||||
|
xclip # x11 clipboard access from terminal
|
||||||
|
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
|
||||||
|
|
||||||
|
## My scripts
|
||||||
|
frajul.open-messaging
|
||||||
|
frajul.xwacomcalibrate
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
programs.opencode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.unstable.opencode;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
watchexec # Run command when any file in current dir changes
|
||||||
|
android-tools # adb
|
||||||
|
# shellcheck # Check bash scripts for common errors
|
||||||
|
sqlite
|
||||||
|
scrcpy # Mirror android screen to pc
|
||||||
|
cargo
|
||||||
|
clippy
|
||||||
|
cntr # nix debugger
|
||||||
|
conda
|
||||||
|
# micromamba # a better, faster conda
|
||||||
|
devcontainer # development container
|
||||||
|
devenv # devbox alternative
|
||||||
|
dbeaver-bin
|
||||||
|
devbox # dev environments using nix
|
||||||
|
distrobox # run commands inside docker containers
|
||||||
|
gcc
|
||||||
|
gradle
|
||||||
|
hexedit
|
||||||
|
unstable.zed-editor
|
||||||
|
jdk
|
||||||
|
julia-bin
|
||||||
|
# (texlive.combine {
|
||||||
|
# # for rendering latex in inkscape
|
||||||
|
# inherit
|
||||||
|
# (texlive)
|
||||||
|
# scheme-medium
|
||||||
|
# standalone
|
||||||
|
# amsmath
|
||||||
|
# preview
|
||||||
|
# # needed for org mode export
|
||||||
|
# wrapfig
|
||||||
|
# capt-of
|
||||||
|
# biblatex
|
||||||
|
# ;
|
||||||
|
# })
|
||||||
|
vagrant
|
||||||
|
matlab # Using nix-matlab overlay defined in flake
|
||||||
|
maven
|
||||||
|
nodejs
|
||||||
|
pkg-config # Often needed to build something
|
||||||
|
# pwndbg # improved gdb (debugger)
|
||||||
|
python3
|
||||||
|
rust-analyzer
|
||||||
|
rustc
|
||||||
|
rustfmt
|
||||||
|
# (pkgs.inkscape-with-extensions.override {
|
||||||
|
# inkscapeExtensions = [ pkgs.inkscape-extensions.textext ];
|
||||||
|
# })
|
||||||
|
# inkscape-with-extensions
|
||||||
|
# inkscape-extensions.textext
|
||||||
|
inkscape
|
||||||
|
gcolor3 # Color picker
|
||||||
|
gimp
|
||||||
|
drawio
|
||||||
|
audacity
|
||||||
|
|
||||||
|
deploy-rs
|
||||||
|
sops
|
||||||
|
pandoc # markdown preview
|
||||||
|
docker-compose
|
||||||
|
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
|
||||||
|
'')
|
||||||
|
|
||||||
|
(pkgs.writeShellScriptBin "matlab-paper" ''
|
||||||
|
matlab -desktop -sd "/home/julian/dev/phdthesis/Phase B/mainSimulation" -softwareopengl
|
||||||
|
'')
|
||||||
|
(pkgs.writeShellScriptBin "matlab-robotik" ''
|
||||||
|
matlab -desktop -sd "/home/julian/nas-sync/Studium/Vorlesungen-Master/ss24/Robotik2" -softwareopengl
|
||||||
|
'')
|
||||||
|
(pkgs.writeShellScriptBin "matlab-gram" ''
|
||||||
|
export GTK_PATH=/usr/lib/gtk-3.0
|
||||||
|
nix shell nixpkgs#gcc11 --command matlab -desktop -sd "/home/julian/dev/matlab-gram" -softwareopengl
|
||||||
|
'')
|
||||||
|
(pkgs.writeShellScriptBin "expenses-tracker" ''
|
||||||
|
java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
};
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user