diff --git a/flake.lock b/flake.lock index 77cbecf..fe330f3 100644 --- a/flake.lock +++ b/flake.lock @@ -484,11 +484,11 @@ ] }, "locked": { - "lastModified": 1681971090, - "narHash": "sha256-3j0M63GkG6GGny9e+C//GyuDCx1IwrurD27S0YI+GQY=", + "lastModified": 1682072616, + "narHash": "sha256-sR5RL3LACGuq5oePcAoJ/e1S3vitKQQSNACMYmqIE1E=", "owner": "nix-community", "repo": "home-manager", - "rev": "5160039edca28a7e66bad0cfc72a07c91d6768ad", + "rev": "47d6c3f65234230d37f1cf7d3d6b5575ec80fe0c", "type": "github" }, "original": { @@ -799,11 +799,11 @@ }, "nixpkgs_22-11": { "locked": { - "lastModified": 1681759395, - "narHash": "sha256-7aaRtLxLAy8qFVIA26ulB+Q5nDVzuQ71qi0s0wMjAws=", + "lastModified": 1681932375, + "narHash": "sha256-tSXbYmpnKSSWpzOrs27ie8X3I0yqKA6AuCzCYNtwbCU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "cd749f58ba83f7155b7062dd49d08e5e47e44d50", + "rev": "3d302c67ab8647327dba84fbdb443cdbf0e82744", "type": "github" }, "original": { @@ -831,11 +831,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1681828457, - "narHash": "sha256-o4Zvs309HOhrNeVloPKqangcKHobsggVt6GFbnEPZlQ=", + "lastModified": 1681920287, + "narHash": "sha256-+/d6XQQfhhXVfqfLROJoqj3TuG38CAeoT6jO1g9r1k0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "555daa9d339b3df75e58ee558a4fec98ea92521e", + "rev": "645bc49f34fa8eff95479f0345ff57e55b53437e", "type": "github" }, "original": { @@ -931,11 +931,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1681907402, - "narHash": "sha256-JMNJ8Xk9kjRhEo3jgm5+b5JICXgs3E4uIUi6SC5DhO8=", + "lastModified": 1682101773, + "narHash": "sha256-/H9R0GfgR0ApycChQSKu5NuaT4w76zo02aKl27pz2aQ=", "owner": "pta2002", "repo": "nixvim", - "rev": "bc468178aef56ab4d473a9cc8fa83c588cf91e4e", + "rev": "9c8bee9da6070ea8b1a95fc5133ed1d88b9b959a", "type": "github" }, "original": { @@ -946,11 +946,11 @@ }, "nur": { "locked": { - "lastModified": 1681994115, - "narHash": "sha256-O/7AVL1iKq4G4Zyf0k71Ki5OOP3U4gH5ms1ZLMPuG1I=", + "lastModified": 1682170448, + "narHash": "sha256-vYIeXWCl9hOTUKUA6RhS+XqN31VR+GJbcNxBYpjIQU4=", "owner": "nix-community", "repo": "NUR", - "rev": "5ea4cf7eafb21011352a3cf857edc2d7c5ccdf70", + "rev": "fe2bdf88ea839ca934412d8c9a7fad26893e481e", "type": "github" }, "original": { diff --git a/nixos/hosts/olympus/default.nix b/nixos/hosts/olympus/default.nix index 0d9992e..1a6322f 100644 --- a/nixos/hosts/olympus/default.nix +++ b/nixos/hosts/olympus/default.nix @@ -162,6 +162,5 @@ ip = "10.42.42.69"; ip6 = "2001:41f0:9639:1:a83:e416:dc99:5ed3"; mac = "34:97:f6:93:9A:AA"; - nix = false; }; } diff --git a/nixos/hosts/olympus/eevee/configuration.nix b/nixos/hosts/olympus/eevee/configuration.nix new file mode 100644 index 0000000..1029b60 --- /dev/null +++ b/nixos/hosts/olympus/eevee/configuration.nix @@ -0,0 +1,113 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, inputs, ... }: { + imports = [ + ./hardware-configuration.nix + ./hardware.nix + ./desktop-env.nix + ./networking.nix + ]; + + # Bootloader. + boot = { + kernelPackages = pkgs.linuxPackages_latest; + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + efi.efiSysMountPoint = "/boot/efi"; + }; + kernel.sysctl = { "fs.inotify.max_user_watches" = 524288; }; + initrd = { + kernelModules = [ "amdgpu" ]; + systemd.enable = true; + verbose = false; + }; + }; + + # fileSystems."/".options = [ "compress=zstd" ]; + + # Set your time zone. + time.timeZone = "Europe/Amsterdam"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_GB.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "nl_NL.UTF-8"; + LC_IDENTIFICATION = "nl_NL.UTF-8"; + LC_MEASUREMENT = "nl_NL.UTF-8"; + LC_MONETARY = "nl_NL.UTF-8"; + LC_NAME = "nl_NL.UTF-8"; + LC_NUMERIC = "nl_NL.UTF-8"; + LC_PAPER = "nl_NL.UTF-8"; + LC_TELEPHONE = "nl_NL.UTF-8"; + LC_TIME = "nl_NL.UTF-8"; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + environment.systemPackages = with pkgs; [ wireguard-tools ]; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.victor = import ./home; + extraSpecialArgs = { inherit inputs; }; + }; + + # Enable sound with pipewire. + sound.enable = true; + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + virtualisation = { + podman.enable = true; + libvirtd = { + enable = true; + qemu.package = pkgs.qemu_kvm; + }; + }; + + fonts.fonts = with pkgs; [ + material-design-icons + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + dejavu_fonts + (nerdfonts.override { + fonts = + [ "DejaVuSansMono" "Ubuntu" "DroidSansMono" "NerdFontsSymbolsOnly" ]; + }) + ]; + + programs.steam = { + enable = true; + # Open ports in the firewall for Steam Remote Play + remotePlay.openFirewall = true; + }; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.05"; # Did you read the comment? + + nix.settings.extra-sandbox-paths = + [ (toString config.programs.ccache.cacheDir) ]; +} diff --git a/nixos/hosts/olympus/eevee/desktop-env.nix b/nixos/hosts/olympus/eevee/desktop-env.nix new file mode 100644 index 0000000..0e2dee2 --- /dev/null +++ b/nixos/hosts/olympus/eevee/desktop-env.nix @@ -0,0 +1,50 @@ +{ pkgs, ... }: { + # Enable the X11 windowing system. + services.xserver.enable = true; + # TODO: Nvidia + # services.xserver.videoDrivers = [ "amdgpu" ]; + services.xserver.excludePackages = [ pkgs.xterm ]; + + # Configure keymap in X11 + services.xserver = { + layout = "us"; + xkbVariant = "altgr-intl"; + }; + + # Enable the GNOME Desktop Environment. + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; + environment.gnome.excludePackages = + (with pkgs; [ gnome-photos gnome-tour gnome-connections ]) + ++ (with pkgs.gnome; [ + atomix # puzzle game + epiphany # web browser + geary # email reader + gedit # text editor + gnome-calendar + gnome-clocks + gnome-contacts + gnome-maps + gnome-music + gnome-notes + gnome-terminal + gnome-weather + hitori # sudoku game + iagno # go game + simple-scan # document scanner + tali # poker game + totem # video player + ]); + + # Services required for gnome + programs.dconf.enable = true; + services.dbus.enable = true; + services.udisks2.enable = true; + + # Extra gnome packages + environment.systemPackages = with pkgs; [ + gnome.gnome-tweaks + gnome.gnome-boxes + ]; +} diff --git a/nixos/hosts/olympus/eevee/hardware.nix b/nixos/hosts/olympus/eevee/hardware.nix new file mode 100644 index 0000000..b7fe6ce --- /dev/null +++ b/nixos/hosts/olympus/eevee/hardware.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: { + hardware.enableAllFirmware = true; + + hardware.bluetooth.enable = true; + + services.hardware.bolt.enable = true; + + # Vulkan + # hardware.opengl.driSupport = true; + # hardware.opengl.extraPackages = with pkgs; [ + # amdvlk + # rocm-opencl-icd + # rocm-opencl-runtime + # ]; + # systemd.tmpfiles.rules = + # [ "L+ /opt/rocm/hip - - - - ${pkgs.hip}" ]; + + # SSD Trim + services.fstrim.enable = true; +} diff --git a/nixos/hosts/olympus/eevee/home/.gitignore b/nixos/hosts/olympus/eevee/home/.gitignore new file mode 100644 index 0000000..3e0fc8e --- /dev/null +++ b/nixos/hosts/olympus/eevee/home/.gitignore @@ -0,0 +1 @@ +*dconf_dump* \ No newline at end of file diff --git a/nixos/hosts/olympus/eevee/home/dconf.nix b/nixos/hosts/olympus/eevee/home/dconf.nix new file mode 100644 index 0000000..fcc2714 --- /dev/null +++ b/nixos/hosts/olympus/eevee/home/dconf.nix @@ -0,0 +1,87 @@ +{ lib, ... }: + +with lib.hm.gvariant; +let + inherit (builtins) attrNames map; + inherit (lib.attrsets) mapAttrs' nameValuePair; + generate_custom_keybindings = binds: + { + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = map (name: + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${name}/") + (attrNames binds); + }; + } // mapAttrs' (name: + nameValuePair + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${name}") + binds; +in { + dconf.settings = { + "org/gnome/desktop/input-sources" = { + sources = [ (mkTuple [ "xkb" "us+altgr-intl" ]) ]; + }; + + "org/gnome/desktop/peripherals/touchpad" = { + tap-to-click = true; + two-finger-scrolling-enabled = true; + }; + + "org/gnome/mutter" = { + attach-modal-dialogs = true; + dynamic-workspaces = false; + edge-tiling = true; + focus-change-on-pointer-rest = true; + workspaces-only-on-primary = true; + }; + + "org/gnome/mutter/keybindings" = { + toggle-tiled-left = [ "bracketleft" ]; + toggle-tiled-right = [ "bracketright" ]; + }; + + "org/gnome/shell/keybindings" = { toggle-overview = [ "d" ]; }; + + "org/gnome/desktop/interface" = { color-scheme = "prefer-dark"; }; + + "org/gnome/desktop/wm/preferences" = { + auto-raise = false; + num-workspaces = 6; + focus-mode = "sloppy"; + }; + + "org/gnome/desktop/wm/keybindings" = { + raise-or-lower = [ "s" ]; + switch-applications = [ "Tab" ]; + switch-applications-backward = [ "Tab" ]; + move-to-workspace-1 = [ "exclam" ]; + move-to-workspace-2 = [ "at" ]; + move-to-workspace-3 = [ "numbersign" ]; + move-to-workspace-4 = [ "dollar" ]; + move-to-workspace-5 = [ "percent" ]; + move-to-workspace-6 = [ "asciicircum" ]; + switch-to-workspace-1 = [ "1" ]; + switch-to-workspace-2 = [ "2" ]; + switch-to-workspace-3 = [ "3" ]; + switch-to-workspace-4 = [ "4" ]; + switch-to-workspace-5 = [ "5" ]; + switch-to-workspace-6 = [ "6" ]; + toggle-fullscreen = [ "M" ]; + toggle-maximized = [ "m" ]; + }; + + "org/gnome/tweaks" = { show-extensions-notice = false; }; + + "org/gnome/boxes" = { first-run = false; }; + } // generate_custom_keybindings { + "terminal" = { + binding = "Return"; + command = "kgx"; + name = "Open Terminal"; + }; + "firefox" = { + binding = "f"; + command = "firefox"; + name = "Open Firefox"; + }; + }; +} diff --git a/nixos/hosts/olympus/eevee/home/default.nix b/nixos/hosts/olympus/eevee/home/default.nix new file mode 100644 index 0000000..855fe91 --- /dev/null +++ b/nixos/hosts/olympus/eevee/home/default.nix @@ -0,0 +1,193 @@ +{ lib, config, pkgs, inputs, ... }: +let + tex = pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-full; + dnd-5e-latex-template = { pkgs = [ pkgs.v.dnd-5e-latex-template ]; }; + }; +in { + programs.home-manager.enable = true; + + home.username = "victor"; + home.homeDirectory = "/home/victor"; + home.stateVersion = "23.05"; + + imports = [ + ./dconf.nix + ./theme.nix + ./neovim.nix + ]; + + home.packages = with pkgs; [ + btop + calibre + element-desktop + fusee-launcher + gcc + gimp + inputs.comma.packages.${pkgs.system}.default + inputs.webcord.packages.${pkgs.system}.default + jetbrains.clion + jetbrains.idea-ultimate + mullvad-vpn + neofetch + nixfmt + nixpkgs-review + python3 + plex-media-player + rustup + solo2-cli + tex + yt-dlp + ]; + + programs.riff = { + enable = true; + direnv = true; + }; + + xdg.mimeApps.enable = true; + xdg.mimeApps.defaultApplications = { + "text/html" = "firefox.desktop"; + "text/plain" = "org.gnome.TextEditor.desktop"; + "application/pdf" = "org.gnome.Evince.desktop"; + + # Images + "image/bmp" = "org.gnome.eog.desktop"; + "image/gif" = "org.gnome.eog.desktop"; + "image/jpg" = "org.gnome.eog.desktop"; + "image/pjpeg" = "org.gnome.eog.desktop"; + "image/png" = "org.gnome.eog.desktop"; + "image/tiff" = "org.gnome.eog.desktop"; + "image/webp" = "org.gnome.eog.desktop"; + "image/x-bmp" = "org.gnome.eog.desktop"; + "image/x-gray" = "org.gnome.eog.desktop"; + "image/x-icb" = "org.gnome.eog.desktop"; + "image/x-ico" = "org.gnome.eog.desktop"; + "image/x-png" = "org.gnome.eog.desktop"; + "image/x-portable-anymap" = "org.gnome.eog.desktop"; + "image/x-portable-bitmap" = "org.gnome.eog.desktop"; + "image/x-portable-graymap" = "org.gnome.eog.desktop"; + "image/x-portable-pixmap" = "org.gnome.eog.desktop"; + "image/x-xbitmap" = "org.gnome.eog.desktop"; + "image/x-xpixmap" = "org.gnome.eog.desktop"; + "image/x-pcx" = "org.gnome.eog.desktop"; + "image/svg+xml" = "org.gnome.eog.desktop"; + "image/svg+xml-compressed" = "org.gnome.eog.desktop"; + "image/vnd.wap.wbmp" = "org.gnome.eog.desktop"; + "image/x-icns" = "org.gnome.eog.desktop"; + }; + + programs.exa = { + enable = true; + enableAliases = true; + }; + + programs.bat.enable = true; + + programs.git = { + enable = true; + package = pkgs.gitAndTools.gitFull; + userName = "Victor"; + userEmail = "victor@xirion.net"; + lfs.enable = true; + # delta.enable = true; + extraConfig = { + push.autoSetupRemote = true; + init.defaultBranch = "main"; + }; + }; + + programs.tmux = { + enable = true; + shortcut = "b"; + terminal = "screen-256color"; + clock24 = true; + }; + + programs.firefox.enable = true; + + programs.vscode = { + enable = true; + package = pkgs.vscode; + userSettings = { + "ltex.language" = "en-GB"; + "latex-workshop.linting.chktex.enabled" = true; + "latex-workshop.latex.clean.subfolder.enabled" = true; + "latex-workshop.latex.outDir" = "%TMPDIR%/%RELATIVE_DOC%"; + "editor.fontFamily" = + "'DejaVuSansMono Nerd Font', 'monospace', monospace"; + "keyboard.dispatch" = "keyCode"; + "rust-analyzer.server.path" = "${pkgs.rust-analyzer}/bin/rust-analyzer"; + "terminal.integrated.defaultProfile.linux" = "zsh"; + "nix.enableLanguageServer" = true; # Enable LSP. + "nix.serverPath" = "${pkgs.nil}/bin/nil"; + "[nix]" = { "editor.defaultFormatter" = "brettm12345.nixfmt-vscode"; }; + "rust-analyzer.checkOnSave.command" = "clippy"; + "debug.allowBreakpointsEverywhere" = true; + # Don't index unecessary things + "files.exclude" = { + "**/.vscode" = true; + "**/.git" = true; + "**/.svn" = true; + "**/.hg" = true; + "**/.deps" = true; + "**/CVS" = true; + "**/.DS_Store" = true; + "/bin" = true; + "/boot" = true; + "/cdrom" = true; + "/dev" = true; + "/proc" = true; + "/etc" = true; + "/nix" = true; + }; + }; + extensions = with pkgs.vscode-extensions; + with pkgs.v.vscode-extensions; [ + brettm12345.nixfmt-vscode + codezombiech.gitignore + editorconfig.editorconfig + foxundermoon.shell-format + james-yu.latex-workshop + jnoortheen.nix-ide + matklad.rust-analyzer + mkhl.direnv + ms-vscode-remote.remote-ssh + ms-vscode.cpptools + platformio.platformio-ide + redhat.vscode-yaml + tamasfe.even-better-toml + valentjn.vscode-ltex + vscodevim.vim + vadimcn.vscode-lldb + xaver.clang-format + sumneko.lua + ]; + }; + + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + + programs.zsh = { + enable = true; + sessionVariables = { DIRENV_LOG_FORMAT = ""; }; + }; + + xdg.userDirs = let home = config.home.homeDirectory; + in { + enable = true; + createDirectories = true; + desktop = "${home}/.desktop"; + documents = "${home}/cloud/Documents"; + download = "${home}/dl"; + music = "${home}/cloud/Music"; + pictures = "${home}/cloud/Pictures"; + publicShare = "${home}/.publicShare"; + templates = "${home}/.templates"; + videos = "${home}/cloud/Videos"; + }; + + services.syncthing.enable = true; +} diff --git a/nixos/hosts/olympus/eevee/home/neovim.nix b/nixos/hosts/olympus/eevee/home/neovim.nix new file mode 100644 index 0000000..494acd2 --- /dev/null +++ b/nixos/hosts/olympus/eevee/home/neovim.nix @@ -0,0 +1,94 @@ +{ inputs, pkgs, ... }: { + imports = [ inputs.nixvim.homeManagerModules.nixvim ]; + programs.nixvim = { + enable = true; + package = pkgs.neovim-unwrapped; + vimAlias = true; + + globals = { mapleader = " "; }; + + maps.normal = { + "ff" = "lua require('telescope.builtin').find_files()"; + "fg" = "lua require('telescope.builtin').live_grep()"; + "" = + "lua require('Comment.api').toggle.linewise.current()"; # map ctrl+/ to commenting code + }; + + extraPlugins = with pkgs.vimPlugins; [ catppuccin-nvim luasnip ]; + + colorscheme = "catppuccin-frappe"; + + extraConfigLua = builtins.readFile ./nvim.lua; + + plugins = { + bufferline.enable = true; + nix.enable = true; + treesitter = { + enable = true; + nixGrammars = true; + # ensureInstalled = [ ]; + }; + surround.enable = true; + fugitive.enable = true; + gitgutter.enable = true; + lualine = { + enable = true; + theme = "catppuccin"; + }; + telescope = { + enable = true; + extensions.fzf-native.enable = true; + extensions.fzf-native.fuzzy = true; + }; + comment-nvim = { enable = true; }; + lsp = { + enable = true; + servers.rust-analyzer.enable = true; + servers.rnix-lsp.enable = true; + servers.pyright.enable = true; + servers.elixirls.enable = true; + servers.clangd.enable = true; + }; + trouble.enable = true; + lspkind.enable = true; + nvim-cmp = { + enable = true; + autoEnableSources = true; + sources = [ + { name = "nvim_lsp"; } + { name = "cmp-latex-symbols"; } + { + name = "luasnip"; + option = { show_autosnippets = true; }; + } + { name = "cmp-spell"; } + { name = "cmp-rg"; } + { name = "path"; } + { name = "buffer"; } + ]; + snippet.expand = "luasnip"; + mappingPresets = [ "insert" "cmdline" ]; + mapping = { + "" = "cmp.mapping.confirm({ select = true })"; + "" = { + modes = [ "i" "s" ]; + action = '' + function(fallback) + local luasnip = require('luasnip') + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expandable() then + luasnip.expand() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end + ''; + }; + }; + }; + }; + }; +} diff --git a/nixos/hosts/olympus/eevee/home/nvim.lua b/nixos/hosts/olympus/eevee/home/nvim.lua new file mode 100644 index 0000000..e69de29 diff --git a/nixos/hosts/olympus/eevee/home/theme.nix b/nixos/hosts/olympus/eevee/home/theme.nix new file mode 100644 index 0000000..f48e44c --- /dev/null +++ b/nixos/hosts/olympus/eevee/home/theme.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, ... }: +let + theme = "Catppuccin-Pink-Dark"; + cursorTheme = config.home.pointerCursor.name; +in { + home.pointerCursor = { + name = "Bibata_Ghost"; + size = 24; + package = pkgs.bibata-cursors-translucent; + }; + + gtk = { + enable = true; + theme = { + name = theme; + package = pkgs.catppuccin-gtk; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme.override { color = "violet"; }; + }; + cursorTheme = { + name = cursorTheme; + inherit (config.home.pointerCursor) package size; + }; + }; + + programs.vscode = { + userSettings."workbench.colorTheme" = "Catppuccin Frappé"; + extensions = [ pkgs.vscode-extensions.catppuccin.catppuccin-vsc ]; + }; +} diff --git a/nixos/hosts/olympus/eevee/networking.nix b/nixos/hosts/olympus/eevee/networking.nix new file mode 100644 index 0000000..826668a --- /dev/null +++ b/nixos/hosts/olympus/eevee/networking.nix @@ -0,0 +1,5 @@ +_: { + networking.networkmanager.enable = true; + networking.firewall.checkReversePath = false; + networking.firewall.enable = false; +}