Compare commits
221 Commits
4745b90cea
...
flake-part
| Author | SHA1 | Date | |
|---|---|---|---|
| 6cbe60c784 | |||
| 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 | |||
| d964a181ad | |||
| 27c36bb7f5 | |||
| b76fe8d508 | |||
| 5c8f199fce | |||
| 00a448010d | |||
| b76da6e9eb | |||
| 68e02739be | |||
| b9b5b378f7 | |||
| 1abc06f58c | |||
| b3f3813b36 | |||
| 56b471cdd4 | |||
| 136dd36b8c | |||
| 3f68d344d1 | |||
| df00e58bd9 |
@@ -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 = []
|
||||
58
.gitea/workflows/update-flake.yaml
Normal file
58
.gitea/workflows/update-flake.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Update Nix Flake
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 0 * * *" # daily run
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
update-flake:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: "${{ gitea.token }}"
|
||||
fetch-depth: 0
|
||||
ref: flake-updates
|
||||
|
||||
- name: Git config
|
||||
shell: bash
|
||||
run: |
|
||||
git config user.name "Gitea Actions"
|
||||
git config user.email "actions@gitea.local"
|
||||
|
||||
- name: Rebase from master branch
|
||||
shell: bash
|
||||
run: |
|
||||
git fetch origin master
|
||||
commits_ahead=$(git rev-list --count HEAD..origin/master)
|
||||
echo "Commits ahead: $commits_ahead"
|
||||
git log --oneline -5
|
||||
echo "----------"
|
||||
git log --oneline -5 origin/master
|
||||
echo .
|
||||
|
||||
if [ $commits_ahead -ne 0 ]
|
||||
then
|
||||
git rebase -X theirs origin/master
|
||||
git push --force-with-lease origin flake-updates
|
||||
else
|
||||
echo "Rebase not necessary"
|
||||
fi
|
||||
|
||||
- name: Set up Nix
|
||||
uses: cachix/install-nix-action@v31
|
||||
|
||||
- name: Update Flake
|
||||
run: nix flake update
|
||||
|
||||
- name: Commit and push changes
|
||||
shell: bash
|
||||
run: |
|
||||
git add flake.lock
|
||||
git status
|
||||
git diff --cached --quiet && echo "No changes to commit." && exit 0
|
||||
|
||||
git commit -m "Update flake.lock $(date -I)"
|
||||
git push --force-with-lease origin flake-updates
|
||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,5 +1,3 @@
|
||||
.dotter/cache.toml
|
||||
.dotter/cache
|
||||
.dotter/local.toml
|
||||
|
||||
nix/result
|
||||
.direnv
|
||||
result*
|
||||
*.qcow2
|
||||
|
||||
27
.sops.yaml
27
.sops.yaml
@@ -1,18 +1,27 @@
|
||||
keys:
|
||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||
creation_rules:
|
||||
- path_regex: secrets/secrets.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *aspi-ssh
|
||||
- *pianonix-ssh
|
||||
- &pianonix-ssh age1tguyu2yd5xv8rgjjl50cq6dq5rr7umqgv098dgre4u9wyj30ea7sexw62c
|
||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
|
||||
- path_regex: secrets/.+
|
||||
creation_rules:
|
||||
- path_regex: hosts/common/secrets.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *aspi-ssh
|
||||
- *pianonix-ssh
|
||||
- *kardorf-ssh
|
||||
|
||||
- path_regex: hosts/builder/secrets.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *builder-ssh
|
||||
|
||||
- path_regex: hosts/pianonix/secrets*
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *pianonix-ssh
|
||||
|
||||
28
Readme.org
28
Readme.org
@@ -1,7 +1,12 @@
|
||||
#+title: My dotfiles
|
||||
|
||||
My dotfiles for which I am using =nix=.
|
||||
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]]
|
||||
* Quick start for home-manger only (no need to pull this repo)
|
||||
- Install nix using the https://github.com/DeterminateSystems/nix-installer
|
||||
- Then run
|
||||
#+begin_src shell
|
||||
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
|
||||
#+end_src
|
||||
- Done
|
||||
|
||||
* Machine selection
|
||||
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
||||
@@ -12,3 +17,22 @@ The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowf
|
||||
and [[file:flake.nix]] was symlinked to file:~/.config/home-manager/flake.nix
|
||||
|
||||
For deployment!!
|
||||
|
||||
* Secrets management with sops
|
||||
Full documentation here: https://github.com/Mic92/sops-nix
|
||||
|
||||
** Edit secrets
|
||||
#+begin_src sh
|
||||
sops edit secrets/secrets.yaml
|
||||
#+end_src
|
||||
|
||||
** Authorize new device
|
||||
- Generate public key from ssh -> Private age key generation not needed
|
||||
#+begin_src sh
|
||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
|
||||
#+end_src
|
||||
- Add age public key to file:.sops.yaml
|
||||
- Update keys
|
||||
#+begin_src sh
|
||||
sops updatekeys secrets/*
|
||||
#+end_src
|
||||
|
||||
13
features-home-manager/alacritty/default.nix
Normal file
13
features-home-manager/alacritty/default.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {};
|
||||
theme = "smoooooth";
|
||||
};
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";
|
||||
}
|
||||
6
features-home-manager/direnv/default.nix
Normal file
6
features-home-manager/direnv/default.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
102
features-home-manager/emacs/default.nix
Normal file
102
features-home-manager/emacs/default.nix
Normal file
@@ -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-rfc-style # nix
|
||||
alejandra # nix
|
||||
|
||||
nixd # nix lsp
|
||||
dockfmt # docker
|
||||
google-java-format # java
|
||||
black # python
|
||||
rustfmt # rust
|
||||
shfmt
|
||||
pyright
|
||||
clang-tools # c++ lsp etc
|
||||
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
|
||||
'';
|
||||
}
|
||||
61
features-home-manager/fish/default.nix
Normal file
61
features-home-manager/fish/default.nix
Normal file
@@ -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'
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
20
features-home-manager/fonts/default.nix
Normal file
20
features-home-manager/fonts/default.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; {
|
||||
fonts.fontconfig.enable = true; # required to autoload fonts from packages
|
||||
home.packages = with pkgs; [
|
||||
nerd-fonts.fira-code
|
||||
font-awesome
|
||||
dejavu_fonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-color-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
source-code-pro
|
||||
];
|
||||
}
|
||||
13
features-home-manager/gammastep/default.nix
Normal file
13
features-home-manager/gammastep/default.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
services.gammastep = {
|
||||
enable = true;
|
||||
provider = "geoclue2";
|
||||
temperature = {
|
||||
day = 6000;
|
||||
night = 4600;
|
||||
};
|
||||
settings = {
|
||||
general.adjustment-method = "wayland";
|
||||
};
|
||||
};
|
||||
}
|
||||
16
features-home-manager/ghostty/default.nix
Normal file
16
features-home-manager/ghostty/default.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
theme = "catppuccin-mocha";
|
||||
font-size = 12;
|
||||
};
|
||||
};
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "ghostty") "ghostty";
|
||||
}
|
||||
33
features-home-manager/gtk/default.nix
Normal file
33
features-home-manager/gtk/default.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (inputs.nix-colors.lib-contrib {inherit pkgs;}) gtkThemeFromScheme;
|
||||
in {
|
||||
# Do not make conditional, just toggle things on and off
|
||||
imports = [inputs.nix-colors.homeManagerModules.default]; # TODO: what does this do
|
||||
|
||||
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = inputs.nix-colors.colorschemes.${config.colorscheme.name}.slug;
|
||||
package = gtkThemeFromScheme {
|
||||
scheme = inputs.nix-colors.colorschemes.${config.colorscheme.name};
|
||||
};
|
||||
};
|
||||
iconTheme = {
|
||||
name = "Papirus-Dark";
|
||||
package = pkgs.papirus-icon-theme;
|
||||
};
|
||||
cursorTheme = {
|
||||
package = pkgs.apple-cursor;
|
||||
name = "macOS";
|
||||
size = 24;
|
||||
};
|
||||
};
|
||||
|
||||
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
|
||||
}
|
||||
452
features-home-manager/hyprland/default.nix
Normal file
452
features-home-manager/hyprland/default.nix
Normal file
@@ -0,0 +1,452 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
imports = [
|
||||
# inputs.hyprland.homeManagerModules.default
|
||||
./waybar
|
||||
./wofi
|
||||
./mako
|
||||
# ./hyprlock
|
||||
./wlogout
|
||||
../gammastep
|
||||
|
||||
./swayidle.nix
|
||||
./swaylock.nix
|
||||
./zathura.nix
|
||||
./waypipe.nix
|
||||
|
||||
# ./hyprbars.nix
|
||||
];
|
||||
|
||||
xdg.portal = {
|
||||
extraPortals = [pkgs.xdg-desktop-portal-wlr];
|
||||
config.hyprland = {
|
||||
default = [
|
||||
"wlr"
|
||||
"gtk"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
programs.imv.enable = true; # TODO: what is that
|
||||
|
||||
home.packages = with pkgs; [
|
||||
hyprpicker
|
||||
brightnessctl
|
||||
frajul.hyprshot-gui
|
||||
frajul.wl-ocr
|
||||
|
||||
wf-recorder
|
||||
wl-clipboard
|
||||
|
||||
(pkgs.writeShellScriptBin "toggle-screen-mirroring" (
|
||||
builtins.readFile ./toggle-screen-mirroring.sh
|
||||
))
|
||||
|
||||
(pkgs.writeShellScriptBin "correct-workspace-locations" (
|
||||
lib.concatStringsSep "\n" (
|
||||
builtins.concatLists (
|
||||
map (
|
||||
monitor:
|
||||
map (ws: "hyprctl dispatch moveworkspacetomonitor ${ws} ${monitor.name}") monitor.workspaces
|
||||
)
|
||||
config.monitors
|
||||
)
|
||||
)
|
||||
))
|
||||
];
|
||||
|
||||
services.cliphist = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
MOZ_ENABLE_WAYLAND = 1;
|
||||
QT_QPA_PLATFORM = "wayland";
|
||||
LIBSEAT_BACKEND = "logind";
|
||||
};
|
||||
|
||||
# services.hypridle = {
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# general = {
|
||||
# after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||
# ignore_dbus_inhibit = false;
|
||||
# lock_cmd = "hyprlock";
|
||||
# };
|
||||
|
||||
# listener = [
|
||||
# {
|
||||
# timeout = 300; # 5min
|
||||
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
# on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||
# }
|
||||
|
||||
# {
|
||||
# timeout = 360; # 6min
|
||||
# on-timeout = "hyprlock"; # lock screen when timeout has passed
|
||||
# }
|
||||
|
||||
# {
|
||||
# timeout = 600; # 10min
|
||||
# on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||
# on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
||||
# }
|
||||
# ];
|
||||
# };
|
||||
# };
|
||||
|
||||
# services.hypridle.enable = true; # can be configured
|
||||
|
||||
services.network-manager-applet.enable = true;
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
# Whether to enable Hyprland wayland compositor
|
||||
enable = true;
|
||||
# package = config.lib.nixGL.wrap (
|
||||
# pkgs.hyprland.override {
|
||||
# # nixgl needed?
|
||||
# wrapRuntimeDeps = false;
|
||||
# }
|
||||
# );
|
||||
|
||||
systemd = {
|
||||
enable = true;
|
||||
# Same as default, but stop graphical-session too
|
||||
extraCommands = lib.mkBefore [
|
||||
"systemctl --user stop graphical-session.target"
|
||||
"systemctl --user start hyprland-session.target"
|
||||
];
|
||||
variables = [
|
||||
"DISPLAY"
|
||||
"HYPRLAND_INSTANCE_SIGNATURE"
|
||||
"WAYLAND_DISPLAY"
|
||||
"XDG_CURRENT_DESKTOP"
|
||||
];
|
||||
};
|
||||
|
||||
# package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable
|
||||
|
||||
# The hyprland package to use (simplifies use of plugins)
|
||||
# package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||
# Whether to enable XWayland
|
||||
xwayland.enable = true;
|
||||
|
||||
# Optional
|
||||
# Whether to enable hyprland-session.target on hyprland startup
|
||||
# systemd.enable = true;
|
||||
# Make PATH available to systemd services
|
||||
# systemd.variables = [ "--all" ];
|
||||
|
||||
plugins = [
|
||||
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
|
||||
# hyprlandPlugins.hyprbars
|
||||
];
|
||||
|
||||
submaps = {
|
||||
"resize".settings = {
|
||||
binde = [
|
||||
", right, resizeactive, 20"
|
||||
", left, resizeactive, -20 0"
|
||||
", up, resizeactive, 0 -20"
|
||||
", down, resizeactive, 0 20"
|
||||
", l, resizeactive, 20"
|
||||
", h, resizeactive, -20 0"
|
||||
", k, resizeactive, 0 -20"
|
||||
", j, resizeactive, 0 20"
|
||||
];
|
||||
|
||||
bind = [
|
||||
", q, submap, reset"
|
||||
", escape, submap, reset"
|
||||
|
||||
", catchall, submap, reset" # make any other keypress cancel the submap
|
||||
];
|
||||
};
|
||||
"open, reset".settings = {
|
||||
bind = [
|
||||
", e, exec, emacs"
|
||||
", m, exec, open-messaging"
|
||||
", b, exec, firefox"
|
||||
|
||||
", catchall, submap, reset" # make any other keypress cancel the submap
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
settings = {
|
||||
"$mod" = "SUPER";
|
||||
|
||||
# Environment variables programs like emacs have access to
|
||||
env = "TERMINAL,${config.terminal}";
|
||||
|
||||
# Monitors
|
||||
monitor = ",preferred,auto,1";
|
||||
|
||||
# Autostart
|
||||
exec-once = [
|
||||
(lib.getExe pkgs.firefox)
|
||||
(lib.getExe pkgs.waybar)
|
||||
];
|
||||
|
||||
# Look and Feel
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 5;
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
# "col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
|
||||
# "col.inactive_border" = "0xff${palette.base00}";
|
||||
};
|
||||
|
||||
decoration = {
|
||||
# power saving
|
||||
blur.enabled = false;
|
||||
# power saving
|
||||
shadow.enabled = false;
|
||||
};
|
||||
|
||||
# Dwindle layout
|
||||
dwindle = {
|
||||
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true; # You probably want this
|
||||
smart_split = false;
|
||||
smart_resizing = false;
|
||||
force_split = 2;
|
||||
# no_gaps_when_only = 2; # with border
|
||||
};
|
||||
|
||||
# Master layout
|
||||
master = {
|
||||
new_status = "slave";
|
||||
# no_gaps_when_only = 2; # with border
|
||||
mfact = 0.5; # Do not make master bigger
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = true;
|
||||
|
||||
animation = [
|
||||
"windows,1,3,default,slide"
|
||||
"fade,1,3,default"
|
||||
"layers,1,3,default,slide"
|
||||
"border,1,3,default"
|
||||
"workspaces,1,3,default,slide"
|
||||
];
|
||||
};
|
||||
|
||||
exec = [
|
||||
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
|
||||
"correct-workspace-locations"
|
||||
];
|
||||
|
||||
misc = {
|
||||
# disable auto polling for config file changes
|
||||
disable_autoreload = true;
|
||||
|
||||
force_default_wallpaper = 0;
|
||||
|
||||
vfr = true; # power saving
|
||||
};
|
||||
|
||||
cursor = {
|
||||
no_hardware_cursors = 1; # disable hardware cursors to fix tearing on kardorf
|
||||
};
|
||||
|
||||
render = {
|
||||
# we do, in fact, want direct scanout
|
||||
direct_scanout = true;
|
||||
};
|
||||
|
||||
# Input
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
natural_scroll = false;
|
||||
follow_mouse = 1;
|
||||
};
|
||||
|
||||
# Window rules
|
||||
windowrulev2 = [
|
||||
"suppressevent maximize, class:.*"
|
||||
"workspace 1, class:firefox"
|
||||
"workspace 8, class:Zotero"
|
||||
"workspace 9, class:nheko"
|
||||
"workspace 9, class:Element"
|
||||
"workspace 9, class:discord"
|
||||
"workspace 9, class:org.telegram.desktop"
|
||||
"workspace 10, class:thunderbird"
|
||||
"float, class:qalculate-gtk"
|
||||
"tile, class:MATLAB, title:MATLAB"
|
||||
];
|
||||
|
||||
# Workspace rules
|
||||
workspace =
|
||||
[
|
||||
# smart gaps (none when only one window in workspace)
|
||||
"w[t1], gapsin:0, gapsout:0, border:1"
|
||||
"w[tg1], gapsin:0, gapsout:0, border:1"
|
||||
"f[1], gapsin:0, gapsout:0, border:1"
|
||||
]
|
||||
# builds like "1, e-DP1" "2, HDMI-1" etc.
|
||||
++ builtins.concatLists (
|
||||
map (monitor: map (ws: "${ws}, monitor:${monitor.name}") monitor.workspaces) config.monitors
|
||||
);
|
||||
|
||||
# Mouse binds
|
||||
bindm = [
|
||||
"$mod, mouse:272, movewindow" # leftclick
|
||||
"$mod, mouse:273, resizewindow" # rightclick
|
||||
];
|
||||
|
||||
# binds
|
||||
bind =
|
||||
[
|
||||
# compositor commands
|
||||
#
|
||||
#
|
||||
"$mod, R, submap, resize"
|
||||
"$mod, O, submap, open"
|
||||
#
|
||||
|
||||
"$mod, SPACE, focuswindow, floating"
|
||||
"$mod SHIFT, SPACE, togglefloating,"
|
||||
"$mod, F, fullscreen,"
|
||||
"$mod, X, killactive,"
|
||||
|
||||
"$mod, -, togglesplit," # dwindle
|
||||
|
||||
# opening applications
|
||||
"$mod, D, exec, wofi --show drun,run"
|
||||
"$mod, E, exec, pcmanfm"
|
||||
"$mod, Return, exec, ${config.terminal}"
|
||||
"$mod, B, exec, firefox"
|
||||
"$mod, C, exec, qalculate-gtk"
|
||||
|
||||
# other commands
|
||||
"$mod SHIFT, E, exec, wlogout -p layer-shell"
|
||||
"$mod, Escape, exec, wlogout -p layer-shell"
|
||||
"$mod SHIFT, R, exec, hyprctl reload"
|
||||
"$mod, Print, exec, hyprshot-gui"
|
||||
", Print, exec, hyprshot-gui"
|
||||
"$mod, P, exec, toggle-screen-mirroring; correct-workspace-locations"
|
||||
|
||||
# "$mod SHIFT, E, exec, pkill Hyprland"
|
||||
# "$mod, G, togglegroup,"
|
||||
# "$mod SHIFT, N, changegroupactive, f"
|
||||
# "$mod SHIFT, P, changegroupactive, b"
|
||||
# "$mod ALT, ,resizeactive,"
|
||||
|
||||
# media keys
|
||||
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||
", XF86AudioPlay, exec, playerctl play-pause"
|
||||
", XF86AudioPause, exec, playerctl pause"
|
||||
", XF86AudioStop, exec, playerctl stop"
|
||||
", XF86AudioNext, exec, playerctl next"
|
||||
", XF86AudioPrev, exec, playerctl previous"
|
||||
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+"
|
||||
", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-"
|
||||
|
||||
# move focus
|
||||
"$mod, left, movefocus, l"
|
||||
"$mod, H, movefocus, l"
|
||||
"$mod, right, movefocus, r"
|
||||
"$mod, L, movefocus, r"
|
||||
"$mod, up, movefocus, u"
|
||||
"$mod, K, movefocus, u"
|
||||
"$mod, down, movefocus, d"
|
||||
"$mod, J, movefocus, d"
|
||||
|
||||
# move window
|
||||
"$mod SHIFT, left, movewindow, l"
|
||||
"$mod SHIFT, H, movewindow, l"
|
||||
"$mod SHIFT, right, movewindow, r"
|
||||
"$mod SHIFT, L, movewindow, r"
|
||||
"$mod SHIFT, up, movewindow, u"
|
||||
"$mod SHIFT, K, movewindow, u"
|
||||
"$mod SHIFT, down, movewindow, d"
|
||||
"$mod SHIFT, J, movewindow, d"
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
"$mod, 1, workspace, 1"
|
||||
"$mod, 2, workspace, 2"
|
||||
"$mod, 3, workspace, 3"
|
||||
"$mod, 4, workspace, 4"
|
||||
"$mod, 5, workspace, 5"
|
||||
"$mod, 6, workspace, 6"
|
||||
"$mod, 7, workspace, 7"
|
||||
"$mod, 8, workspace, 8"
|
||||
"$mod, 9, workspace, 9"
|
||||
"$mod, 0, workspace, 10"
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
"$mod SHIFT, 1, movetoworkspace, 1"
|
||||
"$mod SHIFT, 2, movetoworkspace, 2"
|
||||
"$mod SHIFT, 3, movetoworkspace, 3"
|
||||
"$mod SHIFT, 4, movetoworkspace, 4"
|
||||
"$mod SHIFT, 5, movetoworkspace, 5"
|
||||
"$mod SHIFT, 6, movetoworkspace, 6"
|
||||
"$mod SHIFT, 7, movetoworkspace, 7"
|
||||
"$mod SHIFT, 8, movetoworkspace, 8"
|
||||
"$mod SHIFT, 9, movetoworkspace, 9"
|
||||
"$mod SHIFT, 0, movetoworkspace, 10"
|
||||
|
||||
# Move active window to a workspace without following with mainMod + CTRL + [0-9]
|
||||
"$mod CTRL, 1, movetoworkspacesilent, 1"
|
||||
"$mod CTRL, 2, movetoworkspacesilent, 2"
|
||||
"$mod CTRL, 3, movetoworkspacesilent, 3"
|
||||
"$mod CTRL, 4, movetoworkspacesilent, 4"
|
||||
"$mod CTRL, 5, movetoworkspacesilent, 5"
|
||||
"$mod CTRL, 6, movetoworkspacesilent, 6"
|
||||
"$mod CTRL, 7, movetoworkspacesilent, 7"
|
||||
"$mod CTRL, 8, movetoworkspacesilent, 8"
|
||||
"$mod CTRL, 9, movetoworkspacesilent, 9"
|
||||
"$mod CTRL, 0, movetoworkspacesilent, 10"
|
||||
]
|
||||
++
|
||||
# Screen lock
|
||||
(
|
||||
let
|
||||
swaylock = lib.getExe config.programs.swaylock.package;
|
||||
in
|
||||
lib.optionals config.programs.swaylock.enable [
|
||||
"$mod,TAB,exec,${swaylock} --daemonize"
|
||||
]
|
||||
)
|
||||
++
|
||||
# Notification manager
|
||||
(
|
||||
let
|
||||
makoctl = lib.getExe' config.services.mako.package "makoctl";
|
||||
in
|
||||
lib.optionals config.services.mako.enable [
|
||||
"$mod,w,exec,${makoctl} dismiss"
|
||||
"$mod SHIFT,W,exec,${makoctl} restore"
|
||||
]
|
||||
);
|
||||
|
||||
# plugin = {
|
||||
# hyprbars = {
|
||||
# bar_text_size = 10;
|
||||
# bar_height = 16;
|
||||
# bar_text_font = "Ubuntu Nerd Font";
|
||||
# bar_precedence_over_border = true;
|
||||
# bar_color = "rgb(${palette.base01})";
|
||||
|
||||
# hyprbars-button = [ "rgb(${palette.base03}), 14, , hyprctl dispatch killactive" ];
|
||||
# };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
76
features-home-manager/hyprland/hyprbars.nix
Normal file
76
features-home-manager/hyprland/hyprbars.nix
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: let
|
||||
getHostname = x: lib.last (lib.splitString "@" x);
|
||||
# remoteColorschemes = lib.mapAttrs' (n: v: {
|
||||
# name = getHostname n;
|
||||
# value = v.config.colorscheme.rawColorscheme.colors.${config.colorscheme.mode};
|
||||
# }) outputs.homeConfigurations;
|
||||
rgb = color: "rgb(${lib.removePrefix "#" color})";
|
||||
rgba = color: alpha: "rgba(${lib.removePrefix "#" color}${alpha})";
|
||||
|
||||
hyprbars =
|
||||
(pkgs.hyprlandPlugins.hyprbars.override {
|
||||
# Make sure it's using the same hyprland package as we are
|
||||
hyprland = config.wayland.windowManager.hyprland.package;
|
||||
}).overrideAttrs
|
||||
(old: {
|
||||
# Yeet the initialization notification (I hate it)
|
||||
postPatch =
|
||||
(old.postPatch or "")
|
||||
+ ''
|
||||
${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp
|
||||
'';
|
||||
});
|
||||
in {
|
||||
wayland.windowManager.hyprland = {
|
||||
plugins = [hyprbars];
|
||||
settings = {
|
||||
"plugin:hyprbars" = {
|
||||
bar_height = 25;
|
||||
# bar_color = rgba config.colorscheme.colors.surface "dd";
|
||||
# "col.text" = rgb config.colorscheme.colors.primary;
|
||||
# bar_text_font = config.fontProfiles.regular.name;
|
||||
# bar_text_size = config.fontProfiles.regular.size;
|
||||
bar_part_of_window = true;
|
||||
bar_precedence_over_border = true;
|
||||
hyprbars-button = let
|
||||
closeAction = "hyprctl dispatch killactive";
|
||||
|
||||
isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null'';
|
||||
moveToSpecial = "hyprctl dispatch movetoworkspacesilent special";
|
||||
moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')";
|
||||
minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}";
|
||||
|
||||
maximizeAction = "hyprctl dispatch fullscreen 1";
|
||||
in [
|
||||
# Red close button
|
||||
# "${rgb config.colorscheme.colors.red},12,,${closeAction}"
|
||||
# # Yellow "minimize" (send to special workspace) button
|
||||
# "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}"
|
||||
# # Green "maximize" (fullscreen) button
|
||||
# "${rgb config.colorscheme.colors.green},12,,${maximizeAction}"
|
||||
];
|
||||
};
|
||||
|
||||
# windowrulev2 =
|
||||
# [
|
||||
# "plugin:hyprbars:bar_color ${rgba config.colorscheme.colors.primary "ee"}, focus:1"
|
||||
# "plugin:hyprbars:title_color ${rgb config.colorscheme.colors.on_primary}, focus:1"
|
||||
# ]
|
||||
# ++ (lib.flatten (
|
||||
# lib.mapAttrsToList (name: colors: [
|
||||
# "plugin:hyprbars:bar_color ${rgba colors.primary_container "dd"}, title:\\[${name}\\].*"
|
||||
# "plugin:hyprbars:title_color ${rgb colors.on_primary_container}, title:\\[${name}\\].*"
|
||||
|
||||
# "plugin:hyprbars:bar_color ${rgba colors.primary "ee"}, title:\\[${name}\\].*, focus:1"
|
||||
# "plugin:hyprbars:title_color ${rgb colors.on_primary}, title:\\[${name}\\].*, focus:1"
|
||||
# ]) remoteColorschemes
|
||||
# ));
|
||||
};
|
||||
};
|
||||
}
|
||||
46
features-home-manager/hyprland/hyprlock/default.nix
Normal file
46
features-home-manager/hyprland/hyprlock/default.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
programs.hyprlock.enable = true;
|
||||
programs.hyprlock.settings = {
|
||||
general = {
|
||||
disable_loading_bar = true;
|
||||
hide_cursor = true;
|
||||
ignore_empty_input = true;
|
||||
};
|
||||
|
||||
background = [
|
||||
{
|
||||
color = "#${palette.base00}";
|
||||
# path = "screenshot";
|
||||
# blur_passes = 3;
|
||||
# blur_size = 8;
|
||||
}
|
||||
];
|
||||
|
||||
input-field = [
|
||||
{
|
||||
size = "200, 50";
|
||||
position = "0, -80";
|
||||
monitor = "";
|
||||
dots_center = true;
|
||||
fade_on_empty = false;
|
||||
font_color = "#${palette.base0B}";
|
||||
inner_color = "#${palette.base01}";
|
||||
outer_color = "#${palette.base05}";
|
||||
outline_thickness = 5;
|
||||
placeholder_text = "Password...";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
30
features-home-manager/hyprland/mako/default.nix
Normal file
30
features-home-manager/hyprland/mako/default.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
home.packages = with pkgs; [libnotify];
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
settings = {
|
||||
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
|
||||
backgroundColor = "#${palette.base00}";
|
||||
textColor = "#${palette.base05}";
|
||||
borderColor = "#${palette.base0D}";
|
||||
progressColor = "over #${palette.base02}";
|
||||
extraConfig = ''
|
||||
[urgency=high]
|
||||
border-color=#${palette.base09}
|
||||
# '';
|
||||
};
|
||||
};
|
||||
}
|
||||
58
features-home-manager/hyprland/swayidle.nix
Normal file
58
features-home-manager/hyprland/swayidle.nix
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
|
||||
pgrep = "${pkgs.procps}/bin/pgrep";
|
||||
pactl = "${pkgs.pulseaudio}/bin/pactl";
|
||||
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
|
||||
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
|
||||
|
||||
isLocked = "${pgrep} -x ${swaylock}";
|
||||
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
|
||||
|
||||
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
|
||||
afterLockTimeout = {
|
||||
timeout,
|
||||
command,
|
||||
resumeCommand ? null,
|
||||
}: [
|
||||
{
|
||||
timeout = lockTime + timeout;
|
||||
inherit command resumeCommand;
|
||||
}
|
||||
{
|
||||
command = "${isLocked} && ${command}";
|
||||
inherit resumeCommand timeout;
|
||||
}
|
||||
];
|
||||
in {
|
||||
services.swayidle = {
|
||||
enable = true;
|
||||
systemdTarget = "graphical-session.target";
|
||||
timeouts =
|
||||
# Lock screen
|
||||
[
|
||||
{
|
||||
timeout = lockTime;
|
||||
command = "${swaylock} --daemonize --grace 15";
|
||||
}
|
||||
]
|
||||
++
|
||||
# Turn off displays (hyprland)
|
||||
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
|
||||
timeout = 300;
|
||||
command = "${hyprctl} dispatch dpms off";
|
||||
resumeCommand = "${hyprctl} dispatch dpms on";
|
||||
}))
|
||||
++
|
||||
# Turn off displays (sway)
|
||||
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
|
||||
timeout = 300;
|
||||
command = "${swaymsg} 'output * dpms off'";
|
||||
resumeCommand = "${swaymsg} 'output * dpms on'";
|
||||
}));
|
||||
};
|
||||
}
|
||||
16
features-home-manager/hyprland/swaylock.nix
Normal file
16
features-home-manager/hyprland/swaylock.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.colorscheme) colors;
|
||||
in {
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
color = "000000";
|
||||
ignore-empty-password = true;
|
||||
indicator-idle-visible = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
67
features-home-manager/hyprland/toggle-screen-mirroring.sh
Normal file
67
features-home-manager/hyprland/toggle-screen-mirroring.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
|
||||
|
||||
# Launch at startup to make hyprland disable the internal monitor if an external monitor is detected and enabled
|
||||
# Additionally it's called with a keybind to switch between a laptop monitor and an external display
|
||||
# Ideally the conditional monitor behaviour was instead done directly in hyprland.conf, but I'm not sure whether that's possible
|
||||
#
|
||||
# Relevant info:
|
||||
# - hyprctl monitors: identifies currently enabled monitors
|
||||
# - hyprctl monitors all: identifies ALL connected monitors - including those not in use
|
||||
#
|
||||
# Suggested use:
|
||||
# Add this line somewhere after the regular monitor configuration in hyprland.conf:
|
||||
# exec = /path/to/hyprland-monitors-toggle.sh
|
||||
# Add a keybind to run this script on demand:
|
||||
# bind =,SomeKeyHere, exec, /path/to/hyprland-monitors-toggle.sh
|
||||
|
||||
#move_all_workspaces_to_monitor() {
|
||||
# TARGET_MONITOR="$1"
|
||||
|
||||
# hyprctl workspaces | grep ^workspace | cut --delimiter ' ' --fields 3 | xargs -I '{}' hyprctl dispatch moveworkspacetomonitor '{}' "$TARGET_MONITOR"
|
||||
|
||||
# # Previous approach
|
||||
# #hyprctl swapactiveworkspaces $EXTERNAL_MONITOR $INTERNAL_MONITOR
|
||||
#}
|
||||
|
||||
# TODO: Detect these instead of hardcoding them
|
||||
INTERNAL_MONITOR="eDP-1"
|
||||
EXTERNAL_MONITOR="HDMI-A-1"
|
||||
|
||||
# NUM_MONITORS=$(hyprctl monitors all | grep --count Monitor)
|
||||
# NUM_MONITORS_ACTIVE=$(hyprctl monitors | grep --count Monitor)
|
||||
|
||||
# Make sure all
|
||||
# if [ "$NUM_MONITORS_ACTIVE" -eq 1 ]; then
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# exit
|
||||
# fi
|
||||
|
||||
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .mirrorOf')
|
||||
|
||||
# # For dynamically toggling which monitor is active later via a keybind
|
||||
# if [ "$NUM_MONITORS" -gt 1 ]; then # Handling multiple monitors
|
||||
# if hyprctl monitors | cut --delimiter ' ' --fields 2 | grep --quiet ^$EXTERNAL_MONITOR; then
|
||||
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable"
|
||||
# else
|
||||
# hyprctl keyword monitor $EXTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $EXTERNAL_MONITOR
|
||||
# hyprctl keyword monitor "$INTERNAL_MONITOR, disable"
|
||||
# fi
|
||||
# else # If the external monitor is disconnected without running this script first, it might become the case that no monitor is on - therefore turn on the laptop monitor!
|
||||
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# fi
|
||||
|
||||
echo setting:
|
||||
echo $MIRROR_SETTING
|
||||
if [ "$MIRROR_SETTING" = "none" ]; then
|
||||
echo "mirroring..."
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1, mirror, $INTERNAL_MONITOR"
|
||||
else
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1"
|
||||
fi
|
||||
@@ -12,7 +12,14 @@
|
||||
|
||||
"modules-center": [],
|
||||
|
||||
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||
"modules-right": ["idle_inhibitor", "custom/nixos-update", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
|
||||
|
||||
"custom/nixos-update": {
|
||||
"exec": "frajul-auto-upgrade-status",
|
||||
"return-type": "json",
|
||||
"interval": 2,
|
||||
"on-click-right": "frajul-auto-upgrade-toggle"
|
||||
},
|
||||
|
||||
"hyprland/workspaces": {
|
||||
"on-scroll-up": "hyprctl dispatch workspace m+1",
|
||||
@@ -35,6 +42,7 @@
|
||||
},
|
||||
|
||||
"idle_inhibitor": {
|
||||
"start-activated": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
@@ -75,9 +83,9 @@
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{icon} {capacity}% ({time})",
|
||||
"format-charging": " {capacity}% ({time})",
|
||||
"format-plugged": " {capacity}% ({time})",
|
||||
"format": "{icon} {capacity}%",
|
||||
"format-charging": " {capacity}%",
|
||||
"format-plugged": " {capacity}%",
|
||||
"format-full": "{icon} ",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
},
|
||||
36
features-home-manager/hyprland/waybar/default.nix
Normal file
36
features-home-manager/hyprland/waybar/default.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
|
||||
in {
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
# systemd.enable = true;
|
||||
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
|
||||
};
|
||||
|
||||
xdg.configFile."waybar/style.css".source = ./style.css;
|
||||
xdg.configFile."waybar/theme.css".text = ''
|
||||
/*
|
||||
bg - background
|
||||
fg - foreground
|
||||
*/
|
||||
|
||||
/* Main Colors */
|
||||
@define-color background #${palette.base00};
|
||||
@define-color foreground #${palette.base05};
|
||||
|
||||
/* Workspace Button Colors */
|
||||
@define-color hover-bg #${palette.base01};
|
||||
@define-color hover-fg #${palette.base05};
|
||||
@define-color active-bg #${palette.base02};
|
||||
@define-color active-fg #${palette.base0A};
|
||||
@define-color urgent-bg #${palette.base08};
|
||||
@define-color urgent-fg #${palette.base00};
|
||||
'';
|
||||
}
|
||||
29
features-home-manager/hyprland/waypipe.nix
Normal file
29
features-home-manager/hyprland/waypipe.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
home.packages = [pkgs.waypipe];
|
||||
systemd.user.services = {
|
||||
waypipe-client = {
|
||||
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
|
||||
Service = {
|
||||
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
|
||||
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/client.sock client";
|
||||
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/client.sock";
|
||||
};
|
||||
Install.WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
waypipe-server = {
|
||||
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
|
||||
Service = {
|
||||
Type = "simple";
|
||||
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
|
||||
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/server.sock --title-prefix '[%H] ' --login-shell --display wayland-waypipe server -- ${lib.getExe' pkgs.coreutils "sleep"} infinity";
|
||||
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/server.sock %t/wayland-waypipe";
|
||||
};
|
||||
Install.WantedBy = ["default.target"];
|
||||
};
|
||||
};
|
||||
}
|
||||
39
features-home-manager/hyprland/wlogout/default.nix
Normal file
39
features-home-manager/hyprland/wlogout/default.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
home.packages = with pkgs; [wlogout];
|
||||
|
||||
# xdg.configFile."wlogout/style.css".text = ''
|
||||
# * {
|
||||
# all: unset;
|
||||
# font-family: JetBrains Mono Nerd Font;
|
||||
# }
|
||||
|
||||
# window {
|
||||
# background-color: #${palette.base00};
|
||||
# }
|
||||
|
||||
# button {
|
||||
# color: #${palette.base01};
|
||||
# font-size: 64px;
|
||||
# background-color: rgba(0,0,0,0);
|
||||
# outline-style: none;
|
||||
# margin: 5px;
|
||||
# }
|
||||
|
||||
# button:focus, button:active, button:hover {
|
||||
# color: #${palette.base0D};
|
||||
# transition: ease 0.4s;
|
||||
# }
|
||||
# '';
|
||||
}
|
||||
86
features-home-manager/hyprland/wofi/default.nix
Normal file
86
features-home-manager/hyprland/wofi/default.nix
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
home.packages = with pkgs; [wofi];
|
||||
|
||||
xdg.configFile."wofi/config".source = ./config;
|
||||
xdg.configFile."wofi/style.css".text = ''
|
||||
window {
|
||||
margin: 5px;
|
||||
border: 5px solid #181926;
|
||||
background-color: #${palette.base00};
|
||||
border-radius: 15px;
|
||||
font-family: "JetBrainsMono";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#input {
|
||||
all: unset;
|
||||
min-height: 36px;
|
||||
padding: 4px 10px;
|
||||
margin: 4px;
|
||||
border: none;
|
||||
color: #${palette.base05};
|
||||
font-weight: bold;
|
||||
background-color: #${palette.base01};
|
||||
outline: none;
|
||||
border-radius: 15px;
|
||||
margin: 10px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
margin: 4px;
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
margin: 0px;
|
||||
padding: 3px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
border: 5px solid #${palette.base01};
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin-top: 5px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#text:selected {
|
||||
color: #${palette.base01};
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#entry {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background: #${palette.base0D};
|
||||
background-size: 400% 400%;
|
||||
}
|
||||
'';
|
||||
}
|
||||
33
features-home-manager/hyprland/zathura.nix
Normal file
33
features-home-manager/hyprland/zathura.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{config, ...}: let
|
||||
inherit (config.colorscheme) colors;
|
||||
in {
|
||||
programs.zathura = {
|
||||
enable = true;
|
||||
options = {
|
||||
selection-clipboard = "clipboard";
|
||||
# TODO fix
|
||||
# font = "${config.fontProfiles.regular.name} ${toString config.fontProfiles.regular.size}";
|
||||
# recolor = true;
|
||||
# default-bg = "${colors.surface}";
|
||||
# default-fg = "${colors.surface_bright}";
|
||||
# statusbar-bg = "${colors.surface_container}";
|
||||
# statusbar-fg = "${colors.on_surface_variant}";
|
||||
# inputbar-bg = "${colors.surface}";
|
||||
# inputbar-fg = "${colors.on_secondary}";
|
||||
# notification-bg = "${colors.surface}";
|
||||
# notification-fg = "${colors.on_secondary}";
|
||||
# notification-error-bg = "${colors.error}";
|
||||
# notification-error-fg = "${colors.on_error}";
|
||||
# notification-warning-bg = "${colors.error}";
|
||||
# notification-warning-fg = "${colors.on_error}";
|
||||
# highlight-color = "${colors.tertiary}";
|
||||
# highlight-active-color = "${colors.secondary}";
|
||||
# completion-bg = "${colors.surface_bright}";
|
||||
# completion-fg = "${colors.on_surface}";
|
||||
# completions-highlight-bg = "${colors.secondary}";
|
||||
# completions-highlight-fg = "${colors.on_secondary}";
|
||||
# recolor-lightcolor = "${colors.surface}";
|
||||
# recolor-darkcolor = "${colors.inverse_surface}";
|
||||
};
|
||||
};
|
||||
}
|
||||
53
features-home-manager/i3/default.nix
Normal file
53
features-home-manager/i3/default.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
imports = [../rofi];
|
||||
|
||||
services.dunst.enable = true;
|
||||
|
||||
programs = {
|
||||
i3status-rust = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
nitrogen
|
||||
xfce.xfce4-screenshooter
|
||||
pulseaudio # For pactl commands
|
||||
];
|
||||
xsession.enable = true; # Give gui programs access to sessionVariables
|
||||
# Prevent screen from going blank (check these settings with `xset q`)
|
||||
# And disable bell sound (b)
|
||||
xsession.initExtra = ''
|
||||
${pkgs.xorg.xset}/bin/xset s off
|
||||
${pkgs.xorg.xset}/bin/xset -dpms
|
||||
${pkgs.xorg.xset}/bin/xset b off
|
||||
'';
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
package = pkgs.i3-gaps;
|
||||
};
|
||||
|
||||
xsession.importedVariables = [];
|
||||
|
||||
# Overwrite default home-manager config file
|
||||
xdg.configFile."i3/config".source = lib.mkForce (
|
||||
if config.hostName == "kardorf"
|
||||
then ./i3/config-kardorf
|
||||
else ./i3/config
|
||||
);
|
||||
|
||||
home.file = {
|
||||
".config/i3/scripts" = {
|
||||
source = ./i3/scripts;
|
||||
recursive = true;
|
||||
};
|
||||
".config/i3/workspace-messaging.json".source = ./i3/workspace-chat-element-tele.json;
|
||||
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
|
||||
};
|
||||
|
||||
home.sessionPath = ["/home/julian/.config/i3/scripts"];
|
||||
}
|
||||
@@ -142,8 +142,8 @@ bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||
|
||||
# Monitor config
|
||||
set $monitor_left "DVI-D-0"
|
||||
set $monitor_right "DVI-D-1"
|
||||
set $monitor_left "DVI-D-1"
|
||||
set $monitor_right "DVI-D-2"
|
||||
|
||||
workspace $ws1 output $monitor_left
|
||||
workspace $ws2 output $monitor_left
|
||||
27
features-home-manager/kitty/default.nix
Normal file
27
features-home-manager/kitty/default.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
shellIntegration.enableFishIntegration = true;
|
||||
themeFile = "gruvbox-dark";
|
||||
settings = {
|
||||
enable_audio_bell = false;
|
||||
confirm_os_window_close = 0; # no ask on quit
|
||||
};
|
||||
font = {
|
||||
package = pkgs.dejavu_fonts;
|
||||
name = "DejaVu Sans";
|
||||
size = 12;
|
||||
};
|
||||
};
|
||||
|
||||
# home.shellAliases = {
|
||||
# ssh = "kitten ssh"; # Copy kitten terminfo to remote
|
||||
# };
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "kitty") "kitty";
|
||||
}
|
||||
164
features-home-manager/neovim/default.nix
Normal file
164
features-home-manager/neovim/default.nix
Normal file
@@ -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-rfc-style # nixfmt
|
||||
];
|
||||
|
||||
programs.nixvim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
colorschemes.catppuccin = {
|
||||
enable = true;
|
||||
settings.flavour = "mocha";
|
||||
};
|
||||
|
||||
globals.mapleader = " ";
|
||||
opts = {
|
||||
number = false;
|
||||
relativenumber = false;
|
||||
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
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
12
features-home-manager/nix-helper/default.nix
Normal file
12
features-home-manager/nix-helper/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{pkgs, ...}: {
|
||||
home.sessionVariables = {
|
||||
NH_FLAKE = "/home/julian/.dotfiles";
|
||||
};
|
||||
|
||||
home.shellAliases = {
|
||||
"os" = "nh os switch";
|
||||
"hs" = "nh home switch";
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [nh];
|
||||
}
|
||||
22
features-home-manager/qt-distrobox/default.nix
Normal file
22
features-home-manager/qt-distrobox/default.nix
Normal file
@@ -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"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
14
features-home-manager/rofi/default.nix
Normal file
14
features-home-manager/rofi/default.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# this would need you to config rofi using home-manager
|
||||
# programs.rofi = { enable = true; };
|
||||
|
||||
home.packages = with pkgs; [rofi];
|
||||
|
||||
home.file = {
|
||||
".config/rofi/config.rasi".source = ./config.rasi;
|
||||
};
|
||||
}
|
||||
49
features-home-manager/suites/cli/default.nix
Normal file
49
features-home-manager/suites/cli/default.nix
Normal file
@@ -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
|
||||
xorg.xkill
|
||||
zip
|
||||
dig
|
||||
|
||||
## My scripts
|
||||
frajul.edit-config
|
||||
frajul.lntocp
|
||||
frajul.sos
|
||||
];
|
||||
}
|
||||
74
features-home-manager/suites/desktop/default.nix
Normal file
74
features-home-manager/suites/desktop/default.nix
Normal file
@@ -0,0 +1,74 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [../../gtk];
|
||||
|
||||
services.blueman-applet.enable = true;
|
||||
services.nextcloud-client.enable = true;
|
||||
services.nextcloud-client.startInBackground = true;
|
||||
services.network-manager-applet.enable = true;
|
||||
|
||||
services.syncthing.tray.enable = true;
|
||||
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
extensions = [
|
||||
# Tampermonkey
|
||||
{id = "dhdgffkkebhmkfjojejmpbldmpobfkfo";}
|
||||
];
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
arandr
|
||||
calibre # ebook manager and viewer
|
||||
# digikam
|
||||
discord
|
||||
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
|
||||
mate.engrampa
|
||||
nomacs # Image viewer
|
||||
kdePackages.okular # Pdf reader with many features, good for commenting documents
|
||||
pavucontrol
|
||||
pdfsam-basic # Split, merge, etc for pdfs
|
||||
qalculate-gtk # Nice gui calculator
|
||||
qpdfview
|
||||
# qutebrowser
|
||||
# realvnc-vnc-viewer
|
||||
# rpi-imager # make isos
|
||||
# rustdesk
|
||||
tor-browser
|
||||
rusty-path-of-building # Path of Building for poe1 and poe2
|
||||
# frajul.pob-dev-version # Path of Building
|
||||
vlc
|
||||
wineWowPackages.stable # 32-bit and 64-bit wine
|
||||
winetricks
|
||||
xclip # x11 clipboard access from terminal
|
||||
xfce.mousepad # simple text editor
|
||||
xournalpp # Edit pdf files
|
||||
zoom-us # Video conferencing
|
||||
zotero # Manage papers and other sources
|
||||
pdfpc # Present slides in pdf form
|
||||
|
||||
networkmanager-openvpn
|
||||
keepassxc
|
||||
|
||||
## My scripts
|
||||
frajul.open-messaging
|
||||
frajul.xwacomcalibrate
|
||||
frajul.pob2-frajul
|
||||
];
|
||||
}
|
||||
91
features-home-manager/suites/development/default.nix
Normal file
91
features-home-manager/suites/development/default.nix
Normal file
@@ -0,0 +1,91 @@
|
||||
{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
|
||||
|
||||
## My scripts
|
||||
frajul.deploy-to-pianopi
|
||||
# frajul.rtklib
|
||||
|
||||
(pkgs.writeShellScriptBin "matlab-rsp" ''
|
||||
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl
|
||||
'')
|
||||
|
||||
(pkgs.writeShellScriptBin "matlab-paper" ''
|
||||
matlab -desktop -sd "/home/julian/dev/phdthesis/Phase B/mainSimulation" -softwareopengl
|
||||
'')
|
||||
(pkgs.writeShellScriptBin "matlab-robotik" ''
|
||||
matlab -desktop -sd "/home/julian/nas-sync/Studium/Vorlesungen-Master/ss24/Robotik2" -softwareopengl
|
||||
'')
|
||||
(pkgs.writeShellScriptBin "matlab-gram" ''
|
||||
export GTK_PATH=/usr/lib/gtk-3.0
|
||||
nix shell nixpkgs#gcc11 --command matlab -desktop -sd "/home/julian/dev/matlab-gram" -softwareopengl
|
||||
'')
|
||||
(pkgs.writeShellScriptBin "expenses-tracker" ''
|
||||
java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
|
||||
'')
|
||||
];
|
||||
}
|
||||
10
features-home-manager/tmux/default.nix
Normal file
10
features-home-manager/tmux/default.nix
Normal file
@@ -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
|
||||
};
|
||||
}
|
||||
28
features-home-manager/topgrade/default.nix
Normal file
28
features-home-manager/topgrade/default.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
programs.topgrade = {
|
||||
enable = true;
|
||||
settings = {
|
||||
misc.no_self_update = true;
|
||||
misc.pre_sudo = true; # Cache sudo password for 5 more minutes
|
||||
misc.assume_yes = true;
|
||||
misc.no_retry = true;
|
||||
|
||||
# pre_commands."Update flake" = "git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
|
||||
|
||||
linux.nix_arguments = "--flake /home/julian/.dotfiles";
|
||||
linux.home_manager_arguments = [
|
||||
"--flake"
|
||||
"/home/julian/.dotfiles"
|
||||
];
|
||||
|
||||
git = {
|
||||
# Additional git repositories to pull
|
||||
repos = [
|
||||
"~/.dotfiles"
|
||||
"~/dev/*"
|
||||
"~/.config/doom"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
34
features-home-manager/wezterm/default.nix
Normal file
34
features-home-manager/wezterm/default.nix
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs.wezterm = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
local wezterm = require 'wezterm'
|
||||
local config = {}
|
||||
|
||||
config.color_scheme = 'Catppuccin Mocha'
|
||||
-- config.font = wezterm.font 'JetBrains Mono'
|
||||
-- config.font_size = 12.0
|
||||
config.hide_tab_bar_if_only_one_tab = true
|
||||
config.audible_bell = 'Disabled'
|
||||
config.enable_wayland = false -- Somehow only works for wayland if this is set to false
|
||||
|
||||
config.window_close_confirmation = 'NeverPrompt'
|
||||
|
||||
return config
|
||||
'';
|
||||
};
|
||||
|
||||
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "wezterm") "wezterm-start-here";
|
||||
|
||||
# Otherwise wezterm does not start in directory of parent process
|
||||
home.packages = [
|
||||
(pkgs.writeShellScriptBin "wezterm-start-here" ''
|
||||
wezterm start --cwd "$PWD"
|
||||
'')
|
||||
];
|
||||
}
|
||||
87
features-home-manager/yazi/default.nix
Normal file
87
features-home-manager/yazi/default.nix
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
exiftool
|
||||
unar # extract archives
|
||||
dragon-drop # dragndrop
|
||||
poppler-utils # pdf preview
|
||||
fd
|
||||
ripgrep
|
||||
fzf
|
||||
jq # json preview
|
||||
ffmpegthumbnailer
|
||||
xclip
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
y = "yy"; # Yazi shell wrapper (cd on quit)
|
||||
};
|
||||
|
||||
programs.yazi.enable = true;
|
||||
programs.yazi.enableFishIntegration = true;
|
||||
programs.yazi.settings.manager = {
|
||||
sort_by = "mtime";
|
||||
sort_reverse = true;
|
||||
show_hidden = true;
|
||||
};
|
||||
|
||||
programs.yazi.keymap = {
|
||||
manager.prepend_keymap = [
|
||||
# Override defaults
|
||||
{
|
||||
on = ["e"];
|
||||
run = ''shell --orphan --confirm "pcmanfm &"'';
|
||||
desc = "Open gui file manager";
|
||||
}
|
||||
{
|
||||
on = ["<C-o>"];
|
||||
run = ''shell "$SHELL" --block --confirm'';
|
||||
desc = "Open shell here";
|
||||
}
|
||||
{
|
||||
on = ["<C-n>"];
|
||||
run = ''shell 'dragon -x -i -T "$1"' --confirm'';
|
||||
desc = "Dragndrop via dragon";
|
||||
}
|
||||
{
|
||||
on = ["<Enter>"];
|
||||
run = "plugin --sync smart-enter";
|
||||
desc = "Enter the child directory, or open the file";
|
||||
}
|
||||
];
|
||||
input.prepend_keymap = [
|
||||
{
|
||||
on = ["<Esc>"];
|
||||
run = "close";
|
||||
desc = "Cancel input";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
programs.yazi.settings.opener = {
|
||||
play = [
|
||||
{
|
||||
run = ''vlc "$1"'';
|
||||
orphan = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
xdg.configFile."yazi/flavors" = {
|
||||
source = "${inputs.yazi-flavors}";
|
||||
};
|
||||
xdg.configFile."yazi/plugins/smart-enter.yazi/init.lua".text = ''
|
||||
return {
|
||||
entry = function()
|
||||
local h = cx.active.current.hovered
|
||||
ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true })
|
||||
end,
|
||||
}
|
||||
'';
|
||||
programs.yazi.theme = {
|
||||
flavor.use = "catppuccin-mocha";
|
||||
};
|
||||
}
|
||||
44
features-home-manager/zsh/default.nix
Normal file
44
features-home-manager/zsh/default.nix
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.file = {
|
||||
".config/starship.toml".source = ./starship.toml;
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [starship];
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
|
||||
initExtra =
|
||||
builtins.readFile ./key-bindings.zsh
|
||||
+ builtins.readFile ./functions.zsh
|
||||
+ builtins.readFile ./last-working-dir.zsh
|
||||
+ builtins.readFile ./dir-navigation.zsh;
|
||||
|
||||
zplug = {
|
||||
enable = true;
|
||||
plugins = [
|
||||
# list of plugins: https://github.com/unixorn/awesome-zsh-plugins
|
||||
{name = "agkozak/zsh-z";}
|
||||
{
|
||||
name = "zsh-users/zsh-completions";
|
||||
}
|
||||
|
||||
# make it behave like fish
|
||||
{name = "zsh-users/zsh-autosuggestions";}
|
||||
{name = "zsh-users/zsh-history-substring-search";}
|
||||
{
|
||||
name = "zsh-users/zsh-syntax-highlighting";
|
||||
} # must be last sourced plugin
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
18
features-nixos/base/auto-upgrade.nix
Normal file
18
features-nixos/base/auto-upgrade.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
flake.nixosModules.base = {
|
||||
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";
|
||||
};
|
||||
};
|
||||
}
|
||||
40
features-nixos/base/default.nix
Normal file
40
features-nixos/base/default.nix
Normal file
@@ -0,0 +1,40 @@
|
||||
# Common config for all hosts
|
||||
{
|
||||
flake.nixosModules.base = {
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
];
|
||||
|
||||
# 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;
|
||||
};
|
||||
};
|
||||
}
|
||||
12
features-nixos/base/fish.nix
Normal file
12
features-nixos/base/fish.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
flake.nixosModules.base = {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
vendor = {
|
||||
completions.enable = true;
|
||||
config.enable = true;
|
||||
functions.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
28
features-nixos/base/locale.nix
Normal file
28
features-nixos/base/locale.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
flake.nixosModules.base = {
|
||||
# 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";
|
||||
};
|
||||
}
|
||||
48
features-nixos/base/nix.nix
Normal file
48
features-nixos/base/nix.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
flake.nixosModules.base = {outputs, ...}: {
|
||||
# Apply overlays
|
||||
nixpkgs = {
|
||||
# TODO: apply this to hm and nixos without duplicate code
|
||||
overlays = builtins.attrValues outputs.overlays;
|
||||
config = {
|
||||
nvidia.acceptLicense = true;
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = _: true; # TODO: what is this
|
||||
warn-dirty = false;
|
||||
permittedInsecurePackages = [
|
||||
"olm-3.2.16"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# 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;
|
||||
};
|
||||
}
|
||||
11
features-nixos/base/root.nix
Normal file
11
features-nixos/base/root.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
flake.nixosModules.base = {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
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,9 +1,7 @@
|
||||
#ENC[AES256_GCM,data:NSxfTl2hTXEoGl23aQnElG+df/1YzA==,iv:+oy9oITMGzdM2muDUPjwxJqUu1Bdyregl65/0hiulZ0=,tag:VKjforpyahKj0ktIN36gNw==,type:comment]
|
||||
julian-password: ENC[AES256_GCM,data:tgeu4uVI91j34+Gfzy2Uckmopj9bJNWiu65W0cdA76Kly3LH7RqXCq4rNM4DCwrsX3k9WdOlGX6T9edIjJgmbbe6MkeH7oQwiA==,iv:GE6zfSHymkAewjry7fofURz70az608+hja385LLeCIY=,tag:FqTopL5DyM3DTpa7AoGPDg==,type:str]
|
||||
wifi:
|
||||
pianonix: ENC[AES256_GCM,data:Ty1wElfVj+CU9bTbpuYIk2dA4fgFm59PkQGqvODn51Q=,iv:bLomyTlOW2Z4rPbue7Klo6Jt5lR+44AuL+dIMFgDNAE=,tag:DuH2ayeb19dkPi9xmbAu3A==,type:str]
|
||||
password:
|
||||
aspi: ENC[AES256_GCM,data:vh7eCsrz2VSn/DLLSG7p3Qn/OGWkVo4+54GpkukOwJ4G+jaE4wrIsKBGxON1uIxWLcR1LkR7g4vZc/sY1D+4JvDlvBfjzGKPkw==,iv:Jwk2THv0V3jsFbEIBJnGMlSOR89yaVKOW97fpgfAWcM=,tag:1WQMM9i3yL20hUJ+VvCTIA==,type:str]
|
||||
pianonix: ENC[AES256_GCM,data:BWTSuDE2YozRKuK4PW0vhIzojTCi0qb0dChiiNvjv/D+71TsnZ8NuWlasY/2OBfv1VgID4xFWDqBvD7BgVh+/rvVnE544UzaiQ==,iv:On1J//kCuVvpPyj+NyWu7lyMzr7I/ouWGzL9xDbT+wo=,tag:RO87P4YgMjmD8TzgGJvwrw==,type:str]
|
||||
syncthing:
|
||||
public-keys:
|
||||
aspi-nix: ENC[AES256_GCM,data:ZTykdQCyh4DMuQUCy1DSKsGNxxn1dinaqztpDdJY53pkWcW4YcWRHk94iGJQZgG1oLfr3AB2S3J6b9w2WuV3,iv:9z2ovHzq6JjRtHzNMIQtcUCinIjG/ImSGqqC7KPhpuw=,tag:No2LCjD+XXB77Su+s98MIA==,type:str]
|
||||
@@ -12,40 +10,44 @@ syncthing:
|
||||
key: ENC[AES256_GCM,data:IaCXIRDMWCHj3lTKpkLg1Nd3pX4bktWg4WjZPGKgTBCLVkMi/SDtlaoNhDz+a+Vt6jYTXHS4exFnIVJ878nWSrA1sD2NHXmfsMh1kkLhub68qv0M33dBXvgX0vQ51Z1WMoti73yDUjJH8Ym5yF/SCg2+RbkVf+4pe2hSlAzwkGP6YC2rbCE5sZG31C55MkaGC6zwo2ZpZXdVhCW845SqAc11cF/OeEHb9B1FS3rd+El7rlJHrIEVQTkomNLshcspb13H0z3vNhtfu9pPkGxee8Hp/hEhFQ+waWBAg4w15yKihjHJmhzdjhDHCilvwYaceb7b5OwARuuiruQ+cJ40bdnStDpi2ouP8QJjEi7tmKWeplZ0X70PVZJFH/e/mTH5,iv:3hQMB4ka31w3chXXwjl/1IHF8ES/RobZVeugMC3ddlU=,tag:j8wwrNQUQbCEGtcriSpc4g==,type:str]
|
||||
cert: ENC[AES256_GCM,data:v9LO8qpeGDDV6I+AJU5iTYKKBV6qgr1ddwLvBVEOYyvmtPNeqaatYaK6vMBCabBIhxQu2NC96pREvWu1UHbxaMWvSCT1TzrIPrcFm+gKCH6PIPhqcnQpdGa3OYn01ohThpLp8hEmVUpJ0FO/AnE1QHK0VfPqJ3S0uHLjSCBJtxLmcBWNVvlcTU/P68QIQkrYAQRAtz9aDS+JNpUKhwCJBgjpY1Thj8Lj/fpc1t0qWo3BKIL3eW5iSlUW0iEriFS0bkMr4Bi9mNqpO26l1eZ3IXFJy/7pkqhmXXW83qOaF9AFXgg41p1Kjw4G6isB/obuhR7Z4oQ/AtkSU0wxHP4mF0AWrvC7/YGlrDG9aPYUEWOexTTBHkm89PhgEa69sekbzac7mYYFi/MIdU34ks4oc8ZIChWpT+V66mbo4f+3mn7raih5SLnyEMS7ENBes9cQC7SghSpB7D8c/2+q74A5aEZHUWRhqiDEx9IggP43SiWuNnb/HyZw16RUB7xnQKPs7LzAVlLC6M7ZETUmyEDEWWOsDY8+0Li4wuD3z4WXLAD9nP43TMx4GNoafjG+0Gu05hSR8fWv8strRCtIWjzK3wMaD9VT/cbt2oqOBkJcaqIW8+lM+ktk1WsD4Kc1DQ4q5O2oMrdPOWI9xZOs7DQTFshLHuvxutN05vgEUovI1vbMOl7SIzUW8YUY9PN0ofC7zwQlEJxfOdqT0nwv9vmqikSMP6V3jXgP5OnPb4KVx8G27X0oCjN++dJgDxdkh2JiLR9JaJHNmYPtLlP7hU4NsBpRpd9ObxRlv+uIbF2o0I8PGXMo3IVnRjrFDrRyoth2UJ+YUMGCVuonoS+nZLMCNz1xwRMaZBYjSEESmxc2Ilwdu3XTzd1KF282UvumBpRwcNxvsmPhI84v/XV8TJE8Z7YxyO3RYBQHD5+OuHOHKTtlajnKpSp/m0p0QR7rrGFoDuDKp+Z81MKz8wz3/8GG+sDh0pgniUfNyrmLroLPdT6nj0brvSVWYmOIJHDHKqM+6HZok5PyS+uHlb5dzwnmrd9OmhmwPVdkP5s=,iv:X9VNz2nsN4ywu3E0c+agwZCl43I4bt6jHz0jMoMFTJQ=,tag:RZUWa4h5JoIiZaDrYgcAeg==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTY3lFZlIyRnZOMzNQdnJ2
|
||||
Z0xQQnY1eHFYekVMV3M0UE5hK2xkbStveFRnCncwVVduSEFFQkpwME5XQzF2Z0tK
|
||||
MnhFQ3ZZMk51aGJHUmJFbHA4d1dmdkEKLS0tIHBkVEhaZEY5ZGtYcXRkZzREa0xR
|
||||
eUNsNjE2VS9MTjNtYWluUjJhYXVuTmcKq175s9vx1tPVS+voO+HSkyaT+GbjC/Z+
|
||||
PyKVKyqFAJCRcNP2byaFgAHjXtDFZdipt/0lbw+4UfHrZGpn+9B59Q==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBualdnWmtBTThhZDFVdDRP
|
||||
WHlMamk1MFhUYUwwa0hyQmpobGNocC9VR0ZVCmc3N1FjcUZCNUdTTm91OVpwZDhP
|
||||
bTNXekp2bDd3Tjh6a2ZVTVNTSW9RTU0KLS0tIGJpcUVHb2ZlODgvelhwQ0JFU3l5
|
||||
WU5VanhYMTUvNklYazJxOXVveXhpM2cKCo+4FhhcbRylASEbQb9rAQUzEO1D+0AR
|
||||
52Jzc9s9rSdypeBRE7SaSOI4eVnkEjPfyhNFvMdxiBzBj7GdocpmCw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByRmxCNUE4MTdZNWlOcmxX
|
||||
RmhDS2NpQ0hoWG83SDlIeVhXaFdxNE4yTUVzCkRxS3M5aU5mdWZkYnpNeC9YR3BX
|
||||
N1NEdzlyTm9YT3NQSnowWTZUc1FvYWsKLS0tICs2OVo2djNjUW0yOG41ZTJQeFFB
|
||||
djFENU5USG1QSnRVdlErN1h5bXJhYzQKPDvAHIMR/vT47zbeK3NsS+jSl4HSFRIA
|
||||
NbSKwTbEGn963metTh4HJItdWBAOyiCc3l1Ye49ms9JhYM8n4wHLRQ==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4STZpU0ZnRzVVOFFRUXZG
|
||||
akcwS2Z5V3lmQzRTSGNHT2hDME5JMks2QTNNClpkZzNMc0wyRjVEaVlBRFlyNFhs
|
||||
M1pyeW1XdnZubnRxMzEzMFJoK0lkVVEKLS0tIENhRExzUWRWMUlObmhxazM5cU9y
|
||||
aDFyaDJackFoaEZOYWdTbWt0ODB1bm8Kg1VDAj5/i8ZbYxspIdXrI474YN5YkV4H
|
||||
86maCRDfUxO5lvu4zBa9pOmFtJ2iuJ2MxDnmCSHTl+GOk8yyUT8JhA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||
- recipient: age1tguyu2yd5xv8rgjjl50cq6dq5rr7umqgv098dgre4u9wyj30ea7sexw62c
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVeHJ3NmMzaTh0Zm13Vm1r
|
||||
RmNtMi9FYmJGUmxXeEppM3Fnazl1NTl3ajJjCjFrbXM4WGdOV05qckhkbjlSODZR
|
||||
a0VuakllVTdOc2Uxd3BqRmtsN3NJdHcKLS0tIHRRMXFEcWNZOFE4dFJycGdGTzdP
|
||||
WittUTFFNU5kUWdGcncwdWRQSi9STTgK3GuwolsItCEt3Dh5Lycb8TjfaHTuV/JB
|
||||
P2KSuVsbgjYuCJSknYmSZ+9gdTYC8cVqDnKo7HYFNrCDHZ0P4QwGSg==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAveE9NV2JCOW9odlN6Wmkw
|
||||
WFEvU2pka3htV2FTTFlpc05ES2JjbGxTaFJZCjhYdG1sRVBFaEF3YjNkWEw3Ny8x
|
||||
MlYyTjJBMHA2YVpHRkkwWW5hNDdrS1UKLS0tIFZXTFNVbkd6VFExc0dSVU4vd3JF
|
||||
ajlFY2pvWW13VGxOZ0hEc3dMbU9IeUUKNSf7ycj+1XHhsoghmY2iR1BwIySqfIOF
|
||||
zawE+MQcQg0u+fy6Aik26eUGvQG3rya2Fx2+3VlAbKB+rbiP0fwsgg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2024-11-25T10:20:02Z"
|
||||
mac: ENC[AES256_GCM,data:5bw+S6T99ZxY9jWtlfShtQLwgl5OusHU1tXQ88iVW3EmWAiGLEr8/45S0DtQfjz9rmaEpMwa0ZC7kyXgubE7RopxirG7p5w6h/S0G8nJk0SPPKL/mvTL0cfdeOEGSNfVZNcScCVXZ/if3TZzVZQ+dsNkUWXN7bDYqrJO3dfVk30=,iv:1xm9L708K1Q6WzfZKNlJavLK24lsoBzU1qTRLg9APjs=,tag:GWwNBSiNl9EUYOt1Vn10/g==,type:str]
|
||||
pgp: []
|
||||
- recipient: age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxaTNJNkJ0RVJiYlRzcmlX
|
||||
TmEweVdLaGpoVXMxZEFDU3dOZTJCRjdiNENBCkZ3bjJUNm1vcmY1ZUpZcEo4OGxa
|
||||
UWJKSjNKL002UDhmTmJER2M0MjJ3aG8KLS0tIFMvZjBkOS83T3NDUE82M3kweVNw
|
||||
VXhoN0VyWkVxMEJPQ3orVUNDK21rRU0KvnmuFxcCpP+LZg7v5jaStw9F0owVrQl9
|
||||
AkIq7GUJh7xewLxcVZfiBRpXMhw/mM8LYnd2KGP8R/TfYg+v0//+5A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-04-23T07:00:17Z"
|
||||
mac: ENC[AES256_GCM,data:JgaTIRbzD0hs2o86xUlQrPN2cPXvsuTH/zKG5xbQIDaYcEvD/mkuVa3hfnYKrA91kWg2Y1DgEi9583+o6UCl/+ldY4ptu+xpnYfyQFdhM4rB+KoP/pDt8vQKQ3zAX8fpAkugCgTTbuvm3TfQ1nt98V8boyhCn4JHNC1T0j7ZtZI=,iv:G3YJOLeDWDKuANo2mxS2JAdrRaonD87CU9BpCZZrlRs=,tag:mcKIdP5cSQUwNL2tcv/o6g==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.8.1
|
||||
version: 3.10.1
|
||||
24
features-nixos/base/sops/sops.nix
Normal file
24
features-nixos/base/sops/sops.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
flake.nixosModules.base = {
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
isEd25519 = k: k.type == "ed25519";
|
||||
getKeyPath = k: k.path;
|
||||
keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
|
||||
in {
|
||||
imports = [inputs.sops-nix.nixosModules.sops];
|
||||
|
||||
sops.age = {
|
||||
sshKeyPaths = map getKeyPath keys;
|
||||
|
||||
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
|
||||
# keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||
# Generate key if none of the above worked. With this, building will still work, just without secrets
|
||||
generateKey = false; # TODO: building should not work without secrets!?
|
||||
};
|
||||
|
||||
sops.defaultSopsFile = ./secrets.yaml;
|
||||
};
|
||||
}
|
||||
31
features-nixos/optional/authentication.nix
Normal file
31
features-nixos/optional/authentication.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
flake.nixosModules.authentication = {
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
14
features-nixos/optional/avahi.nix
Normal file
14
features-nixos/optional/avahi.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
flake.nixosModules.avahi = {
|
||||
# MDNS on local network
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
nssmdns6 = true;
|
||||
publish.enable = true;
|
||||
publish.addresses = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
33
features-nixos/optional/binarycaches.nix
Normal file
33
features-nixos/optional/binarycaches.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
flake.nixosModules.binarycaches = {
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
# Setup binary caches
|
||||
nix.settings = {
|
||||
substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"http://binarycache.julian-mutter.de"
|
||||
"https://devenv.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
"root"
|
||||
"@wheel"
|
||||
]; # needed for devenv to add custom caches
|
||||
|
||||
# Ensure we can still build when missing-server is not accessible
|
||||
fallback = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,20 +1,5 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.frajul;
|
||||
let
|
||||
cfg = config.modules.system.boot-efi;
|
||||
in
|
||||
{
|
||||
options.modules.system.boot-efi = with types; {
|
||||
enable = mkBoolOpt false "Whether or not to enable efi booting.";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
flake.nixosModules.boot-efi = {
|
||||
# Bootloader
|
||||
# Use this for simple nix boot menu, if no dual boot required
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
@@ -30,6 +15,5 @@ in
|
||||
"nfs"
|
||||
"cifs"
|
||||
];
|
||||
|
||||
};
|
||||
}
|
||||
7
features-nixos/optional/docker.nix
Normal file
7
features-nixos/optional/docker.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
flake.nixosModules.docker = {
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
8
features-nixos/optional/flatpak.nix
Normal file
8
features-nixos/optional/flatpak.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
flake.nixosModules.flatpak = {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
|
||||
};
|
||||
}
|
||||
23
features-nixos/optional/gamemode.nix
Normal file
23
features-nixos/optional/gamemode.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
flake.nixosModules.gamemode = {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'";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
15
features-nixos/optional/gdm.nix
Normal file
15
features-nixos/optional/gdm.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
flake.nixosModules.gdm = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
services.xserver.displayManager.gdm = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# unlock GPG keyring on login
|
||||
security.pam.services.gdm.enableGnomeKeyring = true;
|
||||
};
|
||||
}
|
||||
39
features-nixos/optional/greetd.nix
Normal file
39
features-nixos/optional/greetd.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
flake.nixosModules.greetd = {config, ...}: let
|
||||
homeCfgs = config.home-manager.users;
|
||||
julianCfg = homeCfgs.julian;
|
||||
in {
|
||||
users.extraUsers.greeter = {
|
||||
# For caching
|
||||
home = "/tmp/greeter-home";
|
||||
createHome = true;
|
||||
};
|
||||
|
||||
programs.regreet = {
|
||||
enable = true;
|
||||
iconTheme = julianCfg.gtk.iconTheme;
|
||||
theme = julianCfg.gtk.theme;
|
||||
# font = julianCfg.fontProfiles.regular; # TODO: do
|
||||
cursorTheme = {
|
||||
inherit (julianCfg.gtk.cursorTheme) name package;
|
||||
};
|
||||
cageArgs = [
|
||||
"-s"
|
||||
"-m"
|
||||
"last"
|
||||
]; # multimonitor use last monitor
|
||||
# settings.background = {
|
||||
# path = julianCfg.wallpaper;
|
||||
# fit = "Cover";
|
||||
# }; # TODO: fix
|
||||
|
||||
# TODO: setting keyboard language does not work
|
||||
# settings = {
|
||||
# env = {
|
||||
# XKB_DEFAULT_LAYOUT = "de";
|
||||
# # XKB_DEFAULT_VARIANT = "altgr-intl";
|
||||
# };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
18
features-nixos/optional/i3.nix
Normal file
18
features-nixos/optional/i3.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
flake.nixosModules.i3 = {
|
||||
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";
|
||||
};
|
||||
};
|
||||
}
|
||||
25
features-nixos/optional/kerberos.nix
Normal file
25
features-nixos/optional/kerberos.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
flake.nixosModules.kerberos = {
|
||||
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";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
51
features-nixos/optional/openssh.nix
Normal file
51
features-nixos/optional/openssh.nix
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
flake.nixosModules.openssh = {
|
||||
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"
|
||||
# ]);
|
||||
# });
|
||||
# };
|
||||
};
|
||||
}
|
||||
11
features-nixos/optional/pcmanfm.nix
Normal file
11
features-nixos/optional/pcmanfm.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
flake.nixosModules.pcmanfm = {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
|
||||
};
|
||||
}
|
||||
30
features-nixos/optional/pipewire.nix
Normal file
30
features-nixos/optional/pipewire.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
flake.nixosModules.pipewire = {
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
12
features-nixos/optional/podman.nix
Normal file
12
features-nixos/optional/podman.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
flake.nixosModules.podman = {config, ...}: let
|
||||
dockerEnabled = config.virtualisation.docker.enable;
|
||||
in {
|
||||
virtualisation.podman = {
|
||||
enable = true;
|
||||
dockerCompat = !dockerEnabled;
|
||||
dockerSocket.enable = !dockerEnabled;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
14
features-nixos/optional/redshift.nix
Normal file
14
features-nixos/optional/redshift.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
flake.nixosModules.redshift = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Set location used by redshift
|
||||
location.provider = "manual";
|
||||
location.latitude = 47.92;
|
||||
location.longitude = 10.12;
|
||||
services.redshift.enable = true;
|
||||
};
|
||||
}
|
||||
36
features-nixos/optional/remote-builder.nix
Normal file
36
features-nixos/optional/remote-builder.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
flake.nixosModules.remote-builder = {
|
||||
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;
|
||||
# }
|
||||
];
|
||||
};
|
||||
}
|
||||
18
features-nixos/optional/thunar.nix
Normal file
18
features-nixos/optional/thunar.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
flake.nixosModules.thunar = {
|
||||
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
|
||||
};
|
||||
}
|
||||
14
features-nixos/optional/virtualbox.nix
Normal file
14
features-nixos/optional/virtualbox.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
flake.nixosModules.virtualbox = {
|
||||
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"];
|
||||
};
|
||||
}
|
||||
14
features-nixos/optional/wireguard.nix
Normal file
14
features-nixos/optional/wireguard.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
flake.nixosModules.wireguard = {
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
11
features-nixos/optional/wireshark.nix
Normal file
11
features-nixos/optional/wireshark.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
flake.nixosModules.wireshark = {
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
dumpcap.enable = true;
|
||||
usbmon.enable = true;
|
||||
};
|
||||
|
||||
users.users.julian.extraGroups = ["wireshark"];
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user