29 Commits

Author SHA1 Message Date
6cbe60c784 Start migration to using flake-parts 2026-03-23 20:34:48 +01:00
ba56618049 Fix hm standalone config 2026-03-23 08:15:03 +01:00
349181f35b Add wireshark config
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2026-03-15 09:54:11 +01:00
0b8b7564a1 Make nix gc explicitly persistent
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2026-03-13 08:14:07 +01:00
54e0f94af5 Add garbage-collect for home-manager 2026-03-13 07:51:57 +01:00
977aa539a3 Update flake
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2026-03-12 07:35:43 +01:00
d56605e37a Add nix-index-database and comma 2026-03-12 07:34:13 +01:00
7d013c83bc Uninstall rtklib
Some checks failed
Update Nix Flake / update-flake (push) Failing after 11s
2026-02-14 06:40:39 +01:00
d42f38531d Update flake 2026-02-14 06:40:33 +01:00
af54219f5f Install element-desktop too
Some checks failed
Update Nix Flake / update-flake (push) Failing after 11s
2026-01-24 16:37:09 +01:00
b6f59055d8 Fix quickstart.nix 2026-01-24 16:36:04 +01:00
cb990c0cd4 Switch to element-desktop 2026-01-24 16:35:54 +01:00
c896e02bf1 Allow unfree packages with "run" and "shell" commands
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2026-01-22 06:56:06 +01:00
c1e031efa9 Fix "systems deprecated" warning
Some checks failed
Update Nix Flake / update-flake (push) Failing after 49s
2026-01-20 21:01:05 +01:00
19f213ca8c development: install opencode 2026-01-20 20:40:09 +01:00
a0ebb3f259 builder: add ollama and ui 2026-01-20 20:39:32 +01:00
3a994a3b8d Add more packages to quickstart configuration 2026-01-20 20:39:03 +01:00
3b4c0e4a63 Clean up configs 2026-01-20 20:38:53 +01:00
b15dd4ce86 move zoxide from yazi to fish config 2026-01-20 20:38:32 +01:00
db5514062c Update readme 2026-01-20 20:24:25 +01:00
7b500ee994 Make v3ms07 a generic quickstart configuration 2026-01-20 20:24:06 +01:00
07eb4664f9 Update flake 2026-01-20 20:04:32 +01:00
872f80e92c Remove non-working packages 2026-01-20 20:02:48 +01:00
562f873f97 hyprland: adapt keyboard shortcuts 2026-01-20 20:02:32 +01:00
2f5868fcca Add config for v3ms07 2026-01-20 20:02:01 +01:00
e1c1f6e104 emacs: install latex for org mode previews
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2026-01-06 12:10:16 +01:00
3bdf73557b desktop: remove vivaldi 2026-01-06 12:04:16 +01:00
bb9988245a hyprland: add submaps for common open commands 2026-01-06 12:04:05 +01:00
713f5bfe8c update flake 2026-01-06 12:03:55 +01:00
165 changed files with 2256 additions and 1881 deletions

View File

@@ -1,7 +1,12 @@
#+title: My dotfiles #+title: My dotfiles
My dotfiles for which I am using =nix=. * Quick start for home-manger only (no need to pull this repo)
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]] - Install nix using the https://github.com/DeterminateSystems/nix-installer
- Then run
#+begin_src shell
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
#+end_src
- Done
* Machine selection * Machine selection
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them: =home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:

View File

@@ -69,6 +69,25 @@ in {
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
frajul.typst-languagetool frajul.typst-languagetool
ltex-ls-plus ltex-ls-plus
(texlive.combine {
inherit
(texlive)
scheme-basic
# for rendering latex in inkscape
standalone
amsmath
preview
# needed for org mode preview
dvisvgm
dvipng # for preview and export as html
wrapfig
# amsmath
ulem
hyperref
capt-of
;
})
] ]
++ lib.optional config.is-nixos emacs; ++ lib.optional config.is-nixos emacs;

View File

@@ -27,6 +27,11 @@ with lib; {
enableFishIntegration = true; enableFishIntegration = true;
}; };
programs.zoxide = {
enable = true;
enableFishIntegration = true;
};
programs.fish = { programs.fish = {
enable = true; enable = true;
@@ -38,14 +43,14 @@ with lib; {
cd $argv cd $argv
''; '';
run = '' run = ''
nix run nixpkgs#"$argv[1]" -- $argv[2..-1] nix run --impure nixpkgs#"$argv[1]" -- $argv[2..-1]
''; '';
shell = '' shell = ''
set args set args
for arg in $argv for arg in $argv
set args $args nixpkgs#$arg set args $args nixpkgs#$arg
end end
nix shell $args nix shell --impure $args
''; '';
fish_user_key_bindings = '' fish_user_key_bindings = ''
bind ctrl-space 'zi; commandline -f repaint' bind ctrl-space 'zi; commandline -f repaint'

View File

@@ -1,7 +1,6 @@
{ {
lib, lib,
pkgs, pkgs,
config,
... ...
}: }:
with lib; { with lib; {

View File

@@ -152,6 +152,37 @@ in {
# hyprlandPlugins.hyprbars # hyprlandPlugins.hyprbars
]; ];
submaps = {
"resize".settings = {
binde = [
", right, resizeactive, 20"
", left, resizeactive, -20 0"
", up, resizeactive, 0 -20"
", down, resizeactive, 0 20"
", l, resizeactive, 20"
", h, resizeactive, -20 0"
", k, resizeactive, 0 -20"
", j, resizeactive, 0 20"
];
bind = [
", q, submap, reset"
", escape, submap, reset"
", catchall, submap, reset" # make any other keypress cancel the submap
];
};
"open, reset".settings = {
bind = [
", e, exec, emacs"
", m, exec, open-messaging"
", b, exec, firefox"
", catchall, submap, reset" # make any other keypress cancel the submap
];
};
};
settings = { settings = {
"$mod" = "SUPER"; "$mod" = "SUPER";
@@ -250,6 +281,7 @@ in {
"workspace 1, class:firefox" "workspace 1, class:firefox"
"workspace 8, class:Zotero" "workspace 8, class:Zotero"
"workspace 9, class:nheko" "workspace 9, class:nheko"
"workspace 9, class:Element"
"workspace 9, class:discord" "workspace 9, class:discord"
"workspace 9, class:org.telegram.desktop" "workspace 9, class:org.telegram.desktop"
"workspace 10, class:thunderbird" "workspace 10, class:thunderbird"
@@ -280,12 +312,18 @@ in {
bind = bind =
[ [
# compositor commands # compositor commands
"$mod, Space, focuswindow, floating" #
"$mod SHIFT, Space, togglefloating," #
"$mod, R, submap, resize"
"$mod, O, submap, open"
#
"$mod, SPACE, focuswindow, floating"
"$mod SHIFT, SPACE, togglefloating,"
"$mod, F, fullscreen," "$mod, F, fullscreen,"
"$mod, X, killactive," "$mod, X, killactive,"
"$mod, O, togglesplit," # dwindle "$mod, -, togglesplit," # dwindle
# opening applications # opening applications
"$mod, D, exec, wofi --show drun,run" "$mod, D, exec, wofi --show drun,run"

View File

@@ -1,5 +1,4 @@
{ {
lib,
pkgs, pkgs,
inputs, inputs,
... ...
@@ -91,7 +90,7 @@
# Code formatting # Code formatting
conform-nvim = { conform-nvim = {
enable = true; enable = true;
settings.formatters_by_ft = with pkgs; { settings.formatters_by_ft = {
lua = ["stylua"]; lua = ["stylua"];
python = ["black"]; python = ["black"];
nix = ["nixfmt"]; nix = ["nixfmt"];

View File

@@ -19,7 +19,6 @@
links2 # Tui web-browser links2 # Tui web-browser
lnav # log analyzing tool lnav # log analyzing tool
mc # Tui file browser mc # Tui file browser
# nix-index
nmap nmap
p7zip # unzip 7zip archives p7zip # unzip 7zip archives
parted parted

View File

@@ -30,9 +30,9 @@
telegram-desktop # telegram telegram-desktop # telegram
# schildichat-desktop # not updated regularly # schildichat-desktop # not updated regularly
nheko nheko
element-desktop
evince # Simple pdf reader, good for focusing on document content evince # Simple pdf reader, good for focusing on document content
firefox firefox
vivaldi
# geogebra # geogebra
cheese cheese
handbrake handbrake

View File

@@ -1,4 +1,9 @@
{pkgs, ...}: { {pkgs, ...}: {
programs.opencode = {
enable = true;
package = pkgs.unstable.opencode;
};
home.packages = with pkgs; [ home.packages = with pkgs; [
watchexec # Run command when any file in current dir changes watchexec # Run command when any file in current dir changes
android-tools # adb android-tools # adb
@@ -63,7 +68,7 @@
## My scripts ## My scripts
frajul.deploy-to-pianopi frajul.deploy-to-pianopi
frajul.rtklib # frajul.rtklib
(pkgs.writeShellScriptBin "matlab-rsp" '' (pkgs.writeShellScriptBin "matlab-rsp" ''
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl

View File

@@ -3,9 +3,6 @@
inputs, inputs,
... ...
}: { }: {
programs.zoxide.enable = true;
programs.zoxide.enableFishIntegration = true;
home.packages = with pkgs; [ home.packages = with pkgs; [
exiftool exiftool
unar # extract archives unar # extract archives

View 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";
};
};
}

View 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;
};
};
}

View File

@@ -0,0 +1,12 @@
{
flake.nixosModules.base = {
programs.fish = {
enable = true;
vendor = {
completions.enable = true;
config.enable = true;
functions.enable = true;
};
};
};
}

View 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";
};
}

View 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;
};
}

View 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
];
};
}

View 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;
};
}

View 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;
};
};
};
};
}

View 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;
};
};
}

View 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;
};
};
}

View File

@@ -0,0 +1,19 @@
{
flake.nixosModules.boot-efi = {
# Bootloader
# Use this for simple nix boot menu, if no dual boot required
boot.loader.systemd-boot.enable = true;
boot.loader.systemd-boot.configurationLimit = 10;
boot.loader.efi.canTouchEfiVariables = true;
# https://github.com/NixOS/nixpkgs/blob/c32c39d6f3b1fe6514598fa40ad2cf9ce22c3fb7/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix#L66
boot.loader.systemd-boot.editor = false;
boot.supportedFilesystems = [
"btrfs"
"ntfs"
"nfs"
"cifs"
];
};
}

View File

@@ -0,0 +1,7 @@
{
flake.nixosModules.docker = {
virtualisation.docker = {
enable = true;
};
};
}

View 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
};
}

View 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'";
};
};
};
};
}

View 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;
};
}

View 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";
# };
# };
};
};
}

View 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";
};
};
}

View 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";
};
};
};
};
}

View 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"
# ]);
# });
# };
};
}

View 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
};
}

View 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;
};
};
};
};
};
}

View 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;
};
};
}

View 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;
};
}

View 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;
# }
];
};
}

View 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
};
}

View 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"];
};
}

View 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;
};
};
};
}

View File

@@ -0,0 +1,11 @@
{
flake.nixosModules.wireshark = {
programs.wireshark = {
enable = true;
dumpcap.enable = true;
usbmon.enable = true;
};
users.users.julian.extraGroups = ["wireshark"];
};
}

View File

@@ -0,0 +1,8 @@
{
flake.nixosModules.xserver = {
services.xserver = {
enable = true;
wacom.enable = true;
};
};
}

View File

@@ -0,0 +1,52 @@
{
flake.nixosModules.users.julian = {
pkgs,
config,
lib,
...
}: let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
users.mutableUsers = false;
users.users.julian = {
description = "Julian";
group = "julian";
isNormalUser = true;
uid = 1000;
shell = pkgs.fish;
extraGroups = ifTheyExist [
"networkmanager"
"wheel"
"audio"
"realtime"
"rtkit"
"network"
"video"
"podman"
"docker"
"git"
"gamemode"
"dialout"
];
openssh.authorizedKeys.keys = lib.splitString "\n" (
builtins.readFile ../../../../homes/julian/ssh.pub
);
# hashedPasswordFile = config.sops.secrets.julian-password.path;
hashedPassword = "$y$j9T$N33kLJQbV8soUoCbDkpwA1$r/yahJDgOPo4GGOrAi6BUG5zLTzmaBrA5NQ4nno561A";
packages = [pkgs.home-manager];
};
users.groups.julian = {
gid = 1000;
};
sops.secrets.julian-password = {
sopsFile = ../../secrets.yaml;
neededForUsers = true;
};
home-manager.users.julian = import ../../../../homes/julian/${config.networking.hostName}.nix;
security.pam.services.swaylock = {}; # Make swaylock unlocking work
};
}

View File

@@ -0,0 +1,30 @@
{
flake.nixosModules.users.pob = {
pkgs,
config,
...
}: let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
users.mutableUsers = false;
users.users.pob = {
description = "A helper user to use another profile for some applications";
group = "pob";
isNormalUser = true;
shell = pkgs.fish;
extraGroups = ifTheyExist [
"networkmanager"
];
packages = with pkgs; [
firefox
wineWowPackages.stable # 32-bit and 64-bit wine
winetricks
];
};
users.groups.pob = {};
security.sudo.extraConfig = ''
julian ALL=(pob) NOPASSWD: ALL
'';
};
}

View File

@@ -0,0 +1,32 @@
{
flake.nixosModules.users.wolfi = {
pkgs,
config,
...
}: let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
users.mutableUsers = false;
users.users.wolfi = {
description = "Wolfi";
group = "wolfi";
isNormalUser = true;
shell = pkgs.fish;
extraGroups = ifTheyExist [
"networkmanager"
"wheel"
"audio"
"network"
"video"
"podman"
"docker"
"git"
"gamemode"
];
hashedPassword = "$y$j9T$ifzWjoZaRtPUOOfMYnbJ20$uFOO1EyDApL52vRUicZYgupaTA/a6sGNUj3imZ/lcb6";
packages = [pkgs.home-manager];
};
users.groups.wolfi = {};
};
}

View File

@@ -0,0 +1,99 @@
{
flake.nixosModules.users.yukari = {
pkgs,
config,
lib,
outputs,
...
}: let
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
in {
users.mutableUsers = false;
users.users.yukari = {
description = "Yukari";
group = "yukari";
isNormalUser = true;
shell = pkgs.fish;
extraGroups = ifTheyExist [
"networkmanager"
"audio"
"network"
"video"
"podman"
"docker"
"git"
"gamemode"
];
createHome = true;
hashedPassword = "$y$j9T$rGuTL0rfiy7ht8L58BGCw0$fN.KwHjYlIitFEPHndKvV06ezgeWzP3/58o1kkviZwB";
packages = [pkgs.home-manager];
};
users.groups.yukari = {};
home-manager.users.yukari = {
imports =
[
../../../../homes/julian/features/fonts
../../../../homes/julian/features/suites/cli
]
++ (builtins.attrValues outputs.homeManagerModules);
home = {
username = lib.mkDefault "yukari";
homeDirectory = lib.mkDefault "/home/${config.home.username}";
stateVersion = lib.mkDefault "23.11";
sessionPath = ["$HOME/.local/bin"];
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
evince # Simple pdf reader, good for focusing on document content
firefox
vivaldi
# 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
qalculate-gtk # Nice gui calculator
qpdfview
# qutebrowser
# realvnc-vnc-viewer
# rustdesk
tor-browser
# 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
];
};
programs = {
home-manager.enable = true;
git.enable = true;
};
};
};
}

148
flake.lock generated
View File

@@ -38,11 +38,11 @@
"utils": "utils" "utils": "utils"
}, },
"locked": { "locked": {
"lastModified": 1762286984, "lastModified": 1770019181,
"narHash": "sha256-9I2H9x5We6Pl+DBYHjR1s3UT8wgwcpAH03kn9CqtdQc=", "narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=",
"owner": "serokell", "owner": "serokell",
"repo": "deploy-rs", "repo": "deploy-rs",
"rev": "9c870f63e28ec1e83305f7f6cb73c941e699f74f", "rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -58,11 +58,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765794845, "lastModified": 1769524058,
"narHash": "sha256-YD5QWlGnusNbZCqR3pxG8tRxx9yUXayLZfAJRWspq2s=", "narHash": "sha256-zygdD6X1PcVNR2PsyK4ptzrVEiAdbMqLos7utrMDEWE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "7194cfe5b7a3660726b0fe7296070eaef601cae9", "rev": "71a3fc97d80881e91710fe721f1158d3b96ae14d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -111,11 +111,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765495779, "lastModified": 1768135262,
"narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=", "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "5635c32d666a59ec9a55cab87e898889869f7b71", "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -203,11 +203,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765859973, "lastModified": 1770260404,
"narHash": "sha256-LN5O0h9GSgcDE/sz4+sLS3CbQALru1x4lh9hrxpeHwI=", "narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "7df150f0d3857cf68dae443813b27acfb201b2d8", "rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -217,13 +217,38 @@
"type": "github" "type": "github"
} }
}, },
"impermanence": { "home-manager_2": {
"inputs": {
"nixpkgs": [
"impermanence",
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1737831083, "lastModified": 1768598210,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=", "narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c47b2cc64a629f8e075de52e4742de688f930dc6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"inputs": {
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1769548169,
"narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=",
"owner": "nix-community", "owner": "nix-community",
"repo": "impermanence", "repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170", "rev": "7b1d382faf603b6d264f58627330f9faa5cba149",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -284,7 +309,7 @@
}, },
"naersk": { "naersk": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1736429655, "lastModified": 1736429655,
@@ -341,6 +366,26 @@
"type": "github" "type": "github"
} }
}, },
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1772945408,
"narHash": "sha256-PMt48sEQ8cgCeljQ9I/32uoBq/8t8y+7W/nAZhf72TQ=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "1c1d8ea87b047788fd7567adf531418c5da321ec",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nix-matlab": { "nix-matlab": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
@@ -385,11 +430,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764234087, "lastModified": 1769813415,
"narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=", "narHash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "032a1878682fafe829edfcf5fdfad635a2efe748", "rev": "8946737ff703382fda7623b9fab071d037e897d5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -400,11 +445,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1764440730, "lastModified": 1770882871,
"narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=", "narHash": "sha256-nw5g+xl3veea+maxJ2/81tMEA/rPq9aF1H5XF35X+OE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3", "rev": "af04cb78aa85b2a4d1c15fc7270347e0d0eda97b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -446,11 +491,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1765779637, "lastModified": 1770841267,
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=", "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4", "rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -461,6 +506,22 @@
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": {
"lastModified": 1768564909,
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": { "locked": {
"lastModified": 0, "lastModified": 0,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=", "narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
@@ -472,13 +533,13 @@
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_3": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1765762245, "lastModified": 1770770419,
"narHash": "sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk=", "narHash": "sha256-iKZMkr6Cm9JzWlRYW/VPoL0A9jVKtZYiU4zSrVeetIs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d", "rev": "6c5e707c6b5339359a9a9e215c5e66d6d802fd7a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -498,11 +559,11 @@
"systems": "systems_5" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1765796859, "lastModified": 1769049374,
"narHash": "sha256-c2YaJUsLGk3WNqIHIU/Pt1fGjNH02ePsHfD5MJlfEe4=", "narHash": "sha256-h0Os2qqNyycDY1FyZgtbn28VF1ySP74/n0f+LDd8j+w=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "d8c9d8451d4592dd7de647230f407d4d6370bd8e", "rev": "b8f76bf5751835647538ef8784e4e6ee8deb8f95",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -522,11 +583,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761730856, "lastModified": 1768249818,
"narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=", "narHash": "sha256-ANfn5OqIxq3HONPIXZ6zuI5sLzX1sS+2qcf/Pa0kQEc=",
"owner": "NuschtOS", "owner": "NuschtOS",
"repo": "search", "repo": "search",
"rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b", "rev": "b6f77b88e9009bfde28e2130e218e5123dc66796",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -544,10 +605,11 @@
"music-reader": "music-reader", "music-reader": "music-reader",
"nix-colors": "nix-colors", "nix-colors": "nix-colors",
"nix-gl": "nix-gl", "nix-gl": "nix-gl",
"nix-index-database": "nix-index-database",
"nix-matlab": "nix-matlab", "nix-matlab": "nix-matlab",
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_4",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nixvim": "nixvim", "nixvim": "nixvim",
"sheet-organizer": "sheet-organizer", "sheet-organizer": "sheet-organizer",
@@ -585,11 +647,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765836173, "lastModified": 1770683991,
"narHash": "sha256-hWRYfdH2ONI7HXbqZqW8Q1y9IRbnXWvtvt/ONZovSNY=", "narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "443a7f2e7e118c4fc63b7fae05ab3080dd0e5c63", "rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -724,11 +786,11 @@
"yazi-flavors": { "yazi-flavors": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1765290552, "lastModified": 1770522883,
"narHash": "sha256-hEnrvfJwCAgM12QwPmjHEwF5xNrwqZH1fTIb/QG0NFI=", "narHash": "sha256-tCAJXPV7s1akc+zHGdWjmdMPG4NpBE92vcO7LAvI5TI=",
"owner": "yazi-rs", "owner": "yazi-rs",
"repo": "flavors", "repo": "flavors",
"rev": "ffe6e3a16c5c51d7e2dedacf8de662fe2413f73a", "rev": "4c5753789ea535540e868e2764127be9230cef23",
"type": "github" "type": "github"
}, },
"original": { "original": {

308
flake.nix
View File

@@ -19,6 +19,10 @@
url = "github:nix-community/home-manager/release-25.11"; url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = { sops-nix = {
url = "github:Mic92/sops-nix"; url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -32,6 +36,9 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
flake-parts.url = "github:hercules-ci/flake-parts";
import-tree.url = "github:vic/import-tree";
# Various flakes # Various flakes
yazi-flavors = { yazi-flavors = {
url = "github:yazi-rs/flavors"; url = "github:yazi-rs/flavors";
@@ -57,146 +64,163 @@
}; };
}; };
outputs = { outputs = inputs:
self, inputs.flake-parts.lib.mkFlake {inherit inputs;} (inputs.import-tree
nixpkgs, [
home-manager, ./hosts
systems, ./features-nixos
... ./homes
} @ inputs: let ./features-home-manager
inherit (self) outputs; # ./modules
lib = nixpkgs.lib // home-manager.lib; # ./overlays
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system}); # ./packages
pkgsFor = lib.genAttrs (import systems) ( ]);
system: # let
import nixpkgs { # inherit (self) outputs;
inherit system; # lib = nixpkgs.lib // home-manager.lib;
config.allowUnfree = true; # forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
config.permittedInsecurePackages = [ # pkgsFor = lib.genAttrs (import systems) (
"olm-3.2.16" # system:
]; # import nixpkgs {
warn-dirty = false; # inherit system;
} # config.allowUnfree = true;
); # config.permittedInsecurePackages = [
in { # "olm-3.2.16"
inherit lib; # ];
# warn-dirty = false;
nixosModules = import ./modules/nixos; # }
homeManagerModules = import ./modules/home-manager; # );
# in {
overlays = import ./overlays {inherit inputs outputs;}; # inherit lib;
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
# nixosModules = import ./modules/nixos;
packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;}); # homeManagerModules = import ./modules/home-manager;
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt * # overlays = import ./overlays {inherit inputs outputs;};
# # hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
nixosConfigurations = {
# Main laptop # packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;});
aspi = lib.nixosSystem { # devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
modules = [./hosts/aspi]; # formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt *
specialArgs = {
inherit inputs outputs; # nixosConfigurations = {
}; # # Main laptop
}; # aspi = lib.nixosSystem {
# Piano raspberry pi # modules = [
pianonix = lib.nixosSystem { # ./hosts/aspi
modules = [./hosts/pianonix]; # ];
specialArgs = { # specialArgs = {
inherit inputs outputs; # inherit inputs outputs;
}; # };
}; # };
kardorf = lib.nixosSystem { # # Piano raspberry pi
modules = [./hosts/kardorf]; # # pianonix = lib.nixosSystem {
specialArgs = { # # modules = [./hosts/pianonix];
inherit inputs outputs; # # specialArgs = {
}; # # inherit inputs outputs;
}; # # };
builder = lib.nixosSystem { # # };
modules = [./hosts/builder]; # kardorf = lib.nixosSystem {
specialArgs = { # modules = [./hosts/kardorf];
inherit inputs outputs; # specialArgs = {
}; # inherit inputs outputs;
}; # };
}; # };
# builder = lib.nixosSystem {
# Standalone HM # modules = [./hosts/builder];
homeConfigurations = { # specialArgs = {
# Main laptop # inherit inputs outputs;
"julian@aspi" = lib.homeManagerConfiguration { # };
modules = [ # };
./homes/julian/aspi.nix # };
./homes/julian/hm-standalone-config.nix
]; # # Standalone HM
pkgs = pkgsFor.x86_64-linux; # homeConfigurations = {
extraSpecialArgs = { # # Main laptop
inherit inputs outputs; # "julian@aspi" = lib.homeManagerConfiguration {
}; # modules = [
}; # ./homes/julian/aspi.nix
# Media server (RPi) # ./homes/julian/hm-standalone-config.nix
"julian@pianonix" = lib.homeManagerConfiguration { # ];
modules = [ # pkgs = pkgsFor.x86_64-linux;
./homes/julian/pianonix.nix # extraSpecialArgs = {
./homes/julian/hm-standalone-config.nix # inherit inputs outputs;
]; # };
pkgs = pkgsFor.aarch64-linux; # };
extraSpecialArgs = { # # Media server (RPi)
inherit inputs outputs; # # "julian@pianonix" = lib.homeManagerConfiguration {
}; # # modules = [
}; # # ./homes/julian/pianonix.nix
"julian@kardorf" = lib.homeManagerConfiguration { # # ./homes/julian/hm-standalone-config.nix
modules = [ # # ];
./homes/julian/kardorf.nix # # pkgs = pkgsFor.aarch64-linux;
./homes/julian/hm-standalone-config.nix # # extraSpecialArgs = {
]; # # inherit inputs outputs;
pkgs = pkgsFor.x86_64-linux; # # };
extraSpecialArgs = { # # };
inherit inputs outputs; # "julian@kardorf" = lib.homeManagerConfiguration {
}; # modules = [
}; # ./homes/julian/kardorf.nix
"julian@v3ms" = lib.homeManagerConfiguration { # ./homes/julian/hm-standalone-config.nix
modules = [ # ];
./homes/julian/v3ms # pkgs = pkgsFor.x86_64-linux;
./homes/julian/hm-standalone-config.nix # extraSpecialArgs = {
]; # inherit inputs outputs;
pkgs = pkgsFor.x86_64-linux; # };
extraSpecialArgs = { # };
inherit inputs outputs; # "julian@v3ms" = lib.homeManagerConfiguration {
}; # modules = [
}; # ./homes/julian/v3ms
}; # ./homes/julian/hm-standalone-config.nix
# ];
# deploy-rs node configuration # pkgs = pkgsFor.x86_64-linux;
deploy.nodes = { # extraSpecialArgs = {
pianonix = { # inherit inputs outputs;
hostname = "pianonix.local"; # };
profiles.system = { # };
sshUser = "root"; # "julian@quickstart" = lib.homeManagerConfiguration {
user = "root"; # modules = [
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix; # ./homes/julian/quickstart.nix
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services # ./homes/julian/hm-standalone-config.nix
}; # ];
}; # pkgs = pkgsFor.x86_64-linux;
# extraSpecialArgs = {
builder = { # inherit inputs outputs;
hostname = "builder.julian-mutter.de"; # };
profiles.system = { # };
sshUser = "root"; # };
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder; # # deploy-rs node configuration
remoteBuild = true; # deploy.nodes = {
}; # # pianonix = {
}; # # hostname = "pianonix.local";
}; # # profiles.system = {
# # sshUser = "root";
# substitutes: nixos-generate --flake .#pianonix -f sd-aarch64 --system aarch64-linux # # user = "root";
pianonix-image = inputs.nixos-generators.nixosGenerate { # # path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
system = "aarch64-linux"; # # confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
format = "sd-aarch64"; # # };
modules = [./hosts/pianonix]; # # };
specialArgs = {
inherit inputs outputs; # builder = {
}; # hostname = "builder.julian-mutter.de";
}; # profiles.system = {
}; # sshUser = "root";
# user = "root";
# path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
# remoteBuild = true;
# };
# };
# };
# # substitutes: nixos-generate --flake .#pianonix -f sd-aarch64 --system aarch64-linux
# pianonix-image = inputs.nixos-generators.nixosGenerate {
# system = "aarch64-linux";
# format = "sd-aarch64";
# modules = [./hosts/pianonix];
# specialArgs = {
# inherit inputs outputs;
# };
# };
# };
} }

View File

@@ -2,6 +2,7 @@
lib, lib,
pkgs, pkgs,
config, config,
inputs,
outputs, outputs,
... ...
}: { }: {
@@ -9,6 +10,7 @@
[ [
../features/fonts ../features/fonts
../features/nix-helper ../features/nix-helper
inputs.nix-index-database.homeModules.default # nix-locate
] ]
++ (builtins.attrValues outputs.homeManagerModules); ++ (builtins.attrValues outputs.homeManagerModules);
@@ -24,13 +26,28 @@
}; };
}; };
# To allow unfree with 'nix run'
xdg.configFile."nixpkgs/config.nix".text = ''
{ allowUnfree = true; }
'';
colorscheme.name = "catppuccin-mocha"; colorscheme.name = "catppuccin-mocha";
# systemd.user.startServices = "sd-switch"; # TODO: what is this # systemd.user.startServices = "sd-switch"; # TODO: what is this
# Expire old hm generations
hm-expire = {
enable = true;
dates = "weekly";
expire = "-30 days";
};
programs = { programs = {
home-manager.enable = true; home-manager.enable = true;
git.enable = true; git.enable = true;
nix-index.enable = true; # allows command-not-found
nix-index-database.comma.enable = true;
}; };
home = { home = {

View File

@@ -13,6 +13,20 @@
}; };
}; };
# Expire old hm generations
hm-expire = {
enable = true;
dates = "weekly";
expire = "-30 days";
};
# Remove unused packets
nix.gc = {
automatic = true;
dates = "weekly";
persistent = true;
};
# Setup binary caches # Setup binary caches
nix.settings = { nix.settings = {
substituters = [ substituters = [

View File

@@ -0,0 +1,32 @@
# Quick configuration for setting up basic things on a standalone home-manager device
# If you want to adapt it to a specific device, copy this file with the correct hostname
{pkgs, ...}: {
imports = [
./global
./features/fish
./features/direnv
./features/neovim
./features/yazi
./features/emacs
./features/nix-helper
./features/tmux
];
is-nixos = false;
home.sessionPath = ["/snap/bin"];
# Essential packages
home.packages = with pkgs; [
bat
dust
fd
ripgrep
fzf
lazygit
mc
tree
wget
];
}

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