{ config , lib , pkgs , ... }: with lib; let nom-system = pkgs.writeFishApplication { name = "nom-system"; runtimeInputs = with pkgs; [ nix-output-monitor ]; text = /* fish */ '' nom build --no-link "/home/moritz/.dotfiles#nixosConfigurations.$(hostname).config.system.build.toplevel" $argv ''; }; nom-system-command = name: command: pkgs.writeFishApplication { inherit name; runtimeInputs = with pkgs; [ nom-system nix ]; text = /* fish */ '' nom-system $argv && ${command} ''; }; f = pkgs.writeFishApplication { name = "f"; runtimeInputs = with pkgs; [ fzf bat ]; text = '' #!/usr/bin/env fish fzf --query "$argv" --multi --bind "enter:become($EDITOR {+})" --preview "bat --color=always --style=header,grid --line-range :500 {+}" ''; completions = '' complete -c f ''; }; gi = pkgs.writeFishApplication { name = "gi"; runtimeInputs = with pkgs; [ fzf gum curl ]; text = /* fish */ '' set url https://www.gitignore.io/api if test (count $argv) -eq 0 set choice ( curl -sL $url/list \ | string split "," \ | fzf -m \ | string join "," ) else set choice (string join "," $argv[1..]) end if gum confirm "Overwrite current .gitignore?" curl -sL $url/$choice > .gitignore else curl -sL $url/$choice >> .gitignore end ''; completions = /* fish */ '' set args (curl -sL https://www.gitignore.io/api/list | string split ",") complete -c gi -fa "$args" ''; }; in { users.users.moritz = { isNormalUser = true; home = "/home/moritz"; extraGroups = [ "wheel" "networkmanager" "video" ]; initialPassword = "password"; # CHANGE ME PLEASE openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGoAqa2m7hIzZ2LS96Z+RCIlRvhBM/j7h27tMBCwMT+a" # Moritz "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhtwHDGAZshiQWKkCcPWV9tC83b+bKBgjDcjP/N2CKO" # Laptop "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKl8gMhwSf1NsP5gp14xbbyjqQLZzcHLb/XKRMoHdXgI" # Desktop "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDHlemuKagHwz2T5rEwgJNlVUdUdOXyPtCEzD73CrwY2zmpR4AMj7y9u3Rm7HwHUDjLap1ZFwg+53bAsVP6HFZccCXoIfO/8BL0WDGQJrfgb+A+UiRhSqSvyZ77bGJkadbBkadguz3qR3PHcb41DOlhuqVcHxsY8ceHMxAuyb0pLJVJLeytMD+CHS/r7hoj2hckTNAZ+VhCXBtdZfZ7uPUBxLfluYRNNMmdwCglsg3RUS242nJUzy3A84+CXIGeWmNG9Fu45IDkwMthxSW9klyU9R38R9DBDcugkyb6vz+JKSuRVAa47qh/kmtsYekfL3ul9D2JN32P8S+6ZoXx+gXupGJ0ltwJWAFkhLJ+yeXj9kCOv/mIUmCB14jMGsvKiSwV25O/twyjqe2LEkMVgimgrjEYoHu+ZTyp0iFtUvSrFo4tsAhfWPV9yj4F/hUksW7xKIwq5Niyx7he5M/XddudtnAximyiBDGCdJm1Ejl0UaGa6ZQv7y6VZdx0PyZuraT7l9ub8so6JlE4cVgSSU9vE0IS2QqBuHhsIjh8RVksoTR2NQbeDdGaGpGnq2C8y0rDXwE/EJA4LK45khX/GPn73n8F0kBG8dBrWgRDAEODpmebScO7d5mCeM0z3lPcRmh+3e3DPnVVOl+uR7udlc7NauLzl7q913UtxZaF1PlD7Q==" # GPG ]; }; time.timeZone = "Europe/Berlin"; my = { bin.enable = true; shell = { abbreviations = { us = "systemctl --user"; rs = "sudo systemctl"; }; aliases = { ls = "exa -lh --icons --git"; cat = "bat"; rm = "rm -i"; mv = "mv -i"; cd = "__zoxide_z"; nixos-update = "pushd ~/.dotfiles && nix flake update && popd"; latexwatch = ''find -type f -name "*.tex" | entr -c latexmk -pdf -silent''; }; variables = { EDITOR = "vim"; }; }; programs = { direnv.enable = true; fish.enable = true; git.enable = true; gpg.enable = true; nix = { gc.enable = true; optimise.enable = true; }; tmux.enable = true; tmux.keybinds = { prefix = { "-" = "split-window -v"; "|" = "split-window -h"; "C-l" = "send-keys C-l"; "R" = "source-file $XDG_CONFIG_HOME/tmux/tmux.conf \\; display-message 'Reloaded tmux.conf'"; }; copy-mode-vi = { "v" = "send -X begin-selection"; "V" = "send -X select-line"; "C-v" = "send -X rectangle-toggle"; }; }; }; }; console.keyMap = "de"; environment.systemPackages = with pkgs; [ # archives ouch # file management trash-cli # monitoring htop bottom # nix (nom-system-command "nixos-boot" "sudo nixos-rebuild boot --flake ~/.dotfiles") (nom-system-command "nixos-switch" "sudo nixos-rebuild switch --flake ~/.dotfiles") comma nix-index nixpkgs-fmt statix manix nix-output-monitor # other bat cht-sh du-dust duf entr exa f gi gparted neofetch reptyr ripgrep up vim viu wget ]; fonts.packages = with pkgs; [ (nerdfonts.override { fonts = [ "FiraCode" ]; }) ]; programs = { mtr.enable = true; command-not-found.enable = true; starship.enable = true; }; services = { sshd.enable = true; # for agenix btrfs.autoScrub.enable = lib.mkDefault (builtins.any (filesystem: filesystem.fsType == "btrfs") (builtins.attrValues config.fileSystems)); }; i18n.extraLocaleSettings = { # LC_NUMERIC = "de_DE.UTF-8"; LC_PAPER = "de_DE.UTF-8"; LC_TIME = "de_DE.UTF-8"; }; home-manager.users.moritz = { programs = { # Let Home Manager install and manage itself. home-manager.enable = true; fzf = { enable = true; defaultOptions = [ "--height 50%" "--bind alt-j:preview-down,alt-k:preview-up" ]; }; zoxide = { enable = true; options = [ "--cmd c" ]; }; }; home = { username = "moritz"; homeDirectory = "/home/moritz"; stateVersion = "21.05"; }; xdg.userDirs.enable = true; }; system.activationScripts.diff = '' if [ -e /run/current-system ]; then ${pkgs.nvd}/bin/nvd --nix-bin-dir ${pkgs.nix}/bin diff /run/current-system/ "$systemConfig" fi ''; }