{ config, pkgs, lib, inputs, hostName, ... }: { imports = [ ../nixos/profiles/debug.nix ../nixos/profiles/graphical.nix ../nixos/profiles/irssi.nix ../nixos/profiles/lang-fr.nix ../nixos/profiles/laptop.nix ../nixos/profiles/printing.nix ../nixos/profiles/radio.nix ../nixos/profiles/tor.nix oignon/backup.nix oignon/hardware.nix oignon/nebula.nix oignon/networking.nix oignon/wireguard.nix ]; # Lower kernel's security for better performances security.kernel.mitigations = "off"; home-manager.users.julm = { imports = [ ../homes/julm.nix ]; }; users.users.root = { openssh.authorizedKeys.keys = map lib.readFile [ # For nix -L run .#oignon.switch ../users/julm/ssh/oignon.pub ]; }; users.users.julm = { isNormalUser = true; uid = 1000; # Put the hashedPassword in /nix/store, # though /etc/shadow is not world readable... # printf %s $(mkpasswd -m md5crypt) hashedPassword = lib.readFile oignon/users/julm/login/hashedPassword.clear; extraGroups = [ "adbusers" "dialout" "lp" "networkmanager" "plugdev" # For rtl-sdr "scanner" "tor" "video" "wheel" #"ipfs" config.services.davfs2.davGroup #"vboxusers" ]; # If created, zfs-mount.service would require: # zfs set overlay=yes ${hostName}/home createHome = false; openssh.authorizedKeys.keys = map lib.readFile [ ../users/julm/ssh/losurdo.pub ]; }; systemd.services.nix-daemon.serviceConfig.LoadCredentialEncrypted = [ "${hostName}.key:${builtins.path { path = ./. + "/${hostName}/nix/secret-key-files.priv.pem.cred"; }}" ]; nix = { extraOptions = '' secret-key-files = /run/credentials/nix-daemon.service/${hostName}.key ''; settings = { substituters = [ #"http://nix-localcache.losurdo.sp" "ssh://nix-ssh@losurdo.sp?priority=30" ]; trusted-public-keys = map lib.readFile [ ../users/nix/ssh/losurdo.pub ]; }; nixPath = lib.mkForce [ "nixpkgs=${inputs.nixpkgs}" ]; }; #environment.etc."nixpkgs".source = pkgs.path; #environment.etc."nixpkgs-overlays".source = inputs.self + "/nixpkgs"; nix.settings.allowed-users = [ config.users.users."nix-ssh".name ]; nix.sshServe = { enable = true; keys = map lib.readFile [ ../users/julm/ssh/losurdo.pub ../users/julm/ssh/oignon.pub ../users/sevy/ssh/patate.pub ]; }; environment.systemPackages = [ pkgs.riseup-vpn # Can't be installed by home-manager because it needs to install policy-kit rules ]; boot.extraModulePackages = [ #config.boot.kernelPackages.v4l2loopback ]; programs.fuse.userAllowOther = true; services.davfs2.enable = true; systemd.automounts = [ { where = "/mnt/aubergine"; automountConfig.TimeoutIdleSec = "5 min"; } ]; fileSystems = let # Use the user's gpg-agent session to query # for the password of the SSH key when auto-mounting. sshAsUser = pkgs.writeScript "sshAsUser" '' user="$1"; shift exec ${pkgs.sudo}/bin/sudo -i -u "$user" \ ${pkgs.openssh}/bin/ssh "$@" ''; options = [ "user" "uid=julm" "gid=users" "allow_other" "exec" # Override "user"'s noexec "noatime" "nosuid" "_netdev" "ssh_command=${sshAsUser}\\040julm" "noauto" "x-gvfs-hide" "x-systemd.automount" #"Compression=yes" # YMMV # Disconnect approximately 2*15=30 seconds after a network failure "ServerAliveCountMax=1" "ServerAliveInterval=15" "dir_cache=no" #"reconnect" ]; in { "/mnt/aubergine" = { device = "${pkgs.sshfs-fuse}/bin/sshfs#julm@aubergine.sp:/"; fsType = "fuse"; inherit options; }; "/mnt/losurdo" = { device = "${pkgs.sshfs-fuse}/bin/sshfs#julm@losurdo.sp:/"; fsType = "fuse"; inherit options; }; "/mnt/mermet" = { device = "${pkgs.sshfs-fuse}/bin/sshfs#julm@mermet.sp:/"; fsType = "fuse"; inherit options; }; "/mnt/ilico/severine" = { device = "https://nuage.ilico.org/remote.php/dav/files/severine/"; fsType = "davfs"; options = let conf = pkgs.writeText "davfs2.conf" '' backup_dir /home/julm/.local/share/davfs2/ilico/severine secrets /home/julm/.davfs2/secrets ''; in [ "conf=${conf}" "user" "noexec" "nosuid" "noauto" "nofail" "_netdev" "reconnect" "x-systemd.automount" "x-systemd.device-timeout=1m" "x-systemd.idle-timeout=1m" "x-systemd.mount-timeout=10s" ]; }; }; networking.firewall.extraCommands = '' ip46tables -A nixos-fw -i wg-intra -p tcp -m tcp --dport 8000 -j ACCEPT ''; services.kubo = { #enable = true; defaultMode = "online"; autoMount = true; enableGC = true; localDiscovery = false; settings = { Datastore.StorageMax = "10GB"; Discovery.MDNS.Enabled = false; #Bootstrap = [ #]; #Swarm.AddrFilters = null; }; startWhenNeeded = true; }; services.udev.packages = [ # Allow the console user access the Yubikey USB device node, # needed for challenge/response to work correctly. pkgs.yubikey-personalization ]; services.xserver = { layout = "fr,us(altgr-intl)"; desktopManager = { session = [ # Let the session be generated by home-manager { name = "home-manager"; start = '' ${pkgs.runtimeShell} $HOME/.hm-xsession & waitPID=$! ''; } ]; }; displayManager = { defaultSession = "home-manager"; #defaultSession = "none+xmonad"; #defaultSession = "mate"; #defaultSession = "cinnamon"; autoLogin = { user = config.users.users.julm.name; }; }; }; # This value determines the NixOS release with which your system is to be # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you should. system.stateVersion = "20.09"; # Did you read the comment? }