{ config, pkgs, lib, ... }: { # Home Manager needs a bit of information about you and the paths it should # manage. home.username = "max"; home.homeDirectory = "/home/max"; nixpkgs.config.allowUnfree = true; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release # introduces backwards incompatible changes. # # You should not change this value, even if you update Home Manager. If you do # want to update the value, then make sure to first check the Home Manager # release notes. home.stateVersion = "23.11"; # Please read the comment before changing. # The home.packages option allows you to install Nix packages into your # environment. home.packages = with pkgs; [ zsh starship zoxide nerdfonts lazygit btop bat eza unzip rustup keepassxc nextcloud-client firefox thunderbird xournalpp kicad prismlauncher steam blender mpd mpdris2 mpc-cli ymuse flip-link bacon probe-rs betaflight-configurator loudgain youtube-dl foot grimblast dconf swaysettings # TODO: move into luhsoccer baguette dev environment cmake ninja zip unzip curl pkg-config python3 wayland-protocols libxkbcommon xorg.libX11 xorg.libXrandr xorg.libXinerama xorg.libXcursor xorg.libXi xorg.libXext ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage # plain files is through 'home.file'. home.file = { # # Building this configuration will create a copy of 'dotfiles/screenrc' in # # the Nix store. Activating the configuration will then make '~/.screenrc' a # # symlink to the Nix store copy. # ".screenrc".source = dotfiles/screenrc; # # You can also set the file content immediately. # ".gradle/gradle.properties".text = '' # org.gradle.console=verbose # org.gradle.daemon.idletimeout=3600000 # ''; }; # Home Manager can also manage your environment variables through # 'home.sessionVariables'. If you don't want to manage your shell through Home # Manager then you have to manually source 'hm-session-vars.sh' located at # either # # ~/.nix-profile/etc/profile.d/hm-session-vars.sh # # or # # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh # # or # # /etc/profiles/per-user/max/etc/profile.d/hm-session-vars.sh # home.sessionVariables = { EDITOR = "nvim"; }; wayland.windowManager.sway = { enable = true; systemd = { enable = true; xdgAutostart = true; }; wrapperFeatures = { gtk = true; }; config = { output = { "HDMI-A-1" = { mode = "3840x2160@60Hz"; }; }; input = { "*" = { xkb_layout = "de"; xkb_options = "caps:ctrl_modifier"; xkb_numlock = "enable"; }; "type:touchpad" = { tap = "enable"; natural_scroll = "enable"; }; }; modifier = "Mod4"; keybindings = let modifier = config.wayland.windowManager.sway.config.modifier; in lib.mkOptionDefault { "${modifier}+F12" = "mode pause-break"; }; # use foot as default terminal terminal = "foot"; assigns = { "1" = [{app_id = "firefox";}]; "2" = [{app_id = "foot";}]; }; bars = []; menu = "${pkgs.tofi}/bin/tofi-drun | ${pkgs.findutils}/bin/xargs swaymsg exec --"; fonts = { names = ["FiraCode Nerd Font"]; size = 11.0; }; modes = { pause-break = { e = "exec --no-startup-id swaymsg exit, mode default"; s = "exec --no-startup-id ${pkgs.dash}/bin/dash -c '${pkgs.swaylock}/bin/swaylock & systemctl suspend-then-hibernate', mode default"; r = "exec --no-startup-id systemctl reboot"; End = "exec --no-startup-id systemctl poweroff"; Return = "mode default"; Escape = "mode default"; }; }; startup = [ {command = "${pkgs.keepassxc}/bin/keepassxc";} {command = "${pkgs.waybar}/bin/waybar";} {command = "${pkgs.foot}/bin/foot";} {command = "${pkgs.firefox}/bin/firefox";} ]; }; }; programs.waybar = { enable = true; settings = { mainBar = { layer = "top"; position = "top"; height = 26; modules-left = ["sway/workspaces" "sway/mode"]; modules-right = ["sway/language" "clock" "battery"]; "sway/language" = { format = "{shortDescription}"; tooltip = false; }; "clock" = { interval = 60; format = "{:%a %d.%m %I:%M}"; }; }; }; style = '' * { border: none; border-radius: 0; padding: 0; margin: 0; font-size: 11px; } window#waybar { background: #292828; color: #ffffff; } #workspaces button { margin-right: 10px; color: #ffffff; } #workspaces button:hover, #workspaces button:active { background-color: #292828; color: #ffffff; } #workspaces button.focused { background-color: #383737; } #language { margin-right: 7px; } #battery { margin-left: 7px; margin-right: 3px; } ''; }; services.kanshi = { enable = true; profiles = { docker_luhbots = { outputs = [ { criteria = "eDP-1"; position = "0,1080"; } { criteria = "Dell Inc. DELL U2422HE GRCPH83"; position = "0,0"; } { criteria = "NEC Corporation E243WMi 7X313185NB"; transform = "90"; position = "1920,0"; } ]; }; }; }; programs.zsh = { enable = true; enableAutosuggestions = true; enableCompletion = true; defaultKeymap = "emacs"; dotDir = ".config/zsh"; history.expireDuplicatesFirst = true; history.path = "$ZDOTDIR/.zsh_history"; historySubstringSearch.enable = true; shellAliases = { ls = "exa --icons -a --group-directories-first"; diff = "diff --color=auto"; grep = "grep --color=auto"; ip = "ip --color=auto"; mkdir = "mkdir -p"; gst = "git status"; gc = "git commit"; ga = "git add"; gpl = "git pull"; gpu = "git push"; gd = "git diff"; gch = "git checkout"; gs = "git switch"; gre = "git restore"; gr = "git remote"; gcl = "git clone"; glg = "git log --graph --abbrev-commit --decorate --format=format:'%C(bold green)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold yellow)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"; gb = "git branch"; gm = "git merge"; gf = "git fetch"; rebuild = "~/dotfiles/nixos/rebuild.sh"; }; syntaxHighlighting.enable = true; syntaxHighlighting.highlighters = ["main" "brackets"]; }; programs.starship = { enable = true; enableBashIntegration = true; enableZshIntegration = true; settings = { add_newline = false; command_timeout = 5000; character = { success_symbol = "[->](bold green)"; error_symbol = "[ X](bold red)"; }; cmd_duration = { min_time = 500; show_milliseconds = true; }; }; }; programs.zoxide = { enable = true; enableBashIntegration = true; enableZshIntegration = true; options = ["--cmd cd"]; }; # Theming gtk = { enable = true; cursorTheme = { package = pkgs.capitaine-cursors; name = "capitaine-cursors-white"; size = 24; }; iconTheme = { package = pkgs.whitesur-icon-theme; name = "WhiteSur-dark"; }; theme = { package = pkgs.whitesur-gtk-theme; name = "WhiteSur-Dark"; }; gtk3.extraConfig = { gtk-dialogs-use-header = false; gtk-cursor-theme-size = 0; gtk-toolbar-style = "GTK_TOOLBAR_BOTH_HORIZ"; gtk-toolbar-icon-style = "GTK_ICON_SIZE_LARGE_TOOLBAR"; gtk-button-images = 0; gtk-menu-images = 0; gtk-enable-event-sounds = 0; gtk-enable-input-feedback-sounds = 1; gtk-xft-antialias = 1; gtk-xft-hinting = 1; gtk-xft-hintstyle = "hintslight"; gtk-xft-rgba = "none"; }; }; home.pointerCursor = { package = pkgs.capitaine-cursors; name = "capitaine-cursors-white"; size = 24; x11.enable = true; x11.defaultCursor = "capitaine-cursors-white"; }; xsession.enable = true; services.nextcloud-client.enable = true; services.mpd = { enable = true; musicDirectory = "/home/max/Music/"; }; services.mpdris2.enable = true; # Let Home Manager install and manage itself. programs.home-manager.enable = true; }