diff --git a/dotfiles/.bashrc b/dotfiles/.bashrc new file mode 100644 index 0000000..7cdf974 --- /dev/null +++ b/dotfiles/.bashrc @@ -0,0 +1,2 @@ +alias ls="eza -la --git" +alias cat="bat" diff --git a/dotfiles/black.png b/dotfiles/black.png new file mode 100644 index 0000000..41d1267 Binary files /dev/null and b/dotfiles/black.png differ diff --git a/dotfiles/helix/README.md b/dotfiles/helix/README.md new file mode 100644 index 0000000..116e2ef --- /dev/null +++ b/dotfiles/helix/README.md @@ -0,0 +1,9 @@ +# helix-config +Holds my helix configuration + +## Setup +### Linux +```cd ~/.config && git clone https://github.com/itsscb/helix.git && cd -``` + +### Windows +```cd $env:AppData; git clone https://github.com/itsscb/helix.git; cd -``` diff --git a/dotfiles/helix/config.toml b/dotfiles/helix/config.toml new file mode 100644 index 0000000..1c0d551 --- /dev/null +++ b/dotfiles/helix/config.toml @@ -0,0 +1,47 @@ +theme = "onedark" + +[editor] +line-number="relative" +bufferline="multiple" +cursorline=true +auto-completion=true +auto-save=true +auto-format=true +text-width=80 +gutters=["diff","diagnostics","line-numbers","spacer"] + +[editor.cursor-shape] +insert="bar" +normal="block" +select="underline" + +[editor.statusline] +left = ["mode", "spinner", "file-modification-indicator", "read-only-indicator"] +center = ["file-name"] +right = ["diagnostics", "register", "selections", "position", "file-encoding", "file-line-ending", "file-type"] +separator = "│" + +[editor.lsp] +enable=true +auto-signature-help=true +display-messages=true +display-inlay-hints=true + +[editor.indent-guides] +render=true +character="┊" +skip-levels=1 + +[keys.insert] +j={k="normal_mode"} +"C-c"="normal_mode" + +[keys.normal.g] +a ="code_action" + +[keys.normal.backspace] +r=":run-shell-command cargo run" +t=":run-shell-command cargo test" +b=":run-shell-command cargo build" +c=":run-shell-command cargo check" + diff --git a/dotfiles/helix/languages.toml b/dotfiles/helix/languages.toml new file mode 100644 index 0000000..7b2a326 --- /dev/null +++ b/dotfiles/helix/languages.toml @@ -0,0 +1,36 @@ +[[language]] +name = "rust" +auto-format = true + +roots = [ + "Cargo.toml", + "Cargo.lock" +] + +[language.auto-pairs] +'(' = ')' +'{' = '}' +'[' = ']' +'"' = '"' +'`' = '`' +'<' = '>' + +[language-server.rust-analyzer] +command = "rust-analyzer" + +[language-server.rust-analyzer.config.check] +config.check.command = "clippy" + +[language-server.rust-analyzer.config] +inlayHints.closingBraceHints.minLines = 10 +inlayHints.closureReturnTypeHints.enable = "with_block" +inlayHints.typeHints.hideClosureInitialization = false +# inlayHints.bindingModeHints.enable = false +# inlayHints.discriminantHints.enable = "fieldless" +# inlayHints.lifetimeElisionHints.enable = "skip_trivial" + + +[[language]] +name = "go" +auto-format = true +formatter = { command = "goimports" } diff --git a/dotfiles/hypr/hyprland.conf b/dotfiles/hypr/hyprland.conf new file mode 100644 index 0000000..d49415f --- /dev/null +++ b/dotfiles/hypr/hyprland.conf @@ -0,0 +1,192 @@ + +# ####################################################################################### +# AUTOGENERATED HYPR CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# autogenerated = 1 # remove this line to remove the warning + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1 +exec-once = /etc/nixos/dotfiles/hypr/init.sh + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Set programs that you use +$terminal = alacritty +$fileManager = dolphin +$menu = rofi -show drun + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 2 + + touchpad { + natural_scroll = yes + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 20 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = master + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = false +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, T, exec, $terminal +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, O, togglesplit, # dwindle +bind = $mainMod, U, fullscreen, +bind = $mainMod, P, focuscurrentorlast, +bind = $mainMod, P, movewindow,l +# Move focus with mainMod + arrow keys +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, K, movefocus, u +bind = $mainMod, J, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/dotfiles/hypr/init.sh b/dotfiles/hypr/init.sh new file mode 100755 index 0000000..1b214b3 --- /dev/null +++ b/dotfiles/hypr/init.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +swww-daemon & +nm-applet --indicator & +waybar & +dunst diff --git a/dotfiles/hypr/rust.png b/dotfiles/hypr/rust.png new file mode 100644 index 0000000..ae7881f Binary files /dev/null and b/dotfiles/hypr/rust.png differ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e99ba3c --- /dev/null +++ b/flake.lock @@ -0,0 +1,261 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714931954, + "narHash": "sha256-QXpLmgmisNK2Zgpnu9DiO9ScrKJuJ4zmiMTNpObVIuk=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3dfe05aa9b5646995ace887931fa60269a039777", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1713612213, + "narHash": "sha256-zJboXgWNpNhKyNF8H/3UYzWkx7w00TOCGKi3cwi+tsw=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "cab4746180f210a3c1dd3d53e45c510e309e90e1", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "hyprcursor": "hyprcursor", + "hyprlang": "hyprlang", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs", + "systems": "systems", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1714933694, + "narHash": "sha256-sua/1gAfZ2lz3kxFyH6Hg/xu1eTkXOORlhXa21PaLJc=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "cddeec47a1fc0e70d8598fd10c29cd0e9489999f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-plugins": { + "inputs": { + "hyprland": [ + "hyprland" + ], + "systems": [ + "hyprland-plugins", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1714916173, + "narHash": "sha256-XP9v42PdSBkP/JlllfZR/0FDD1PMAVqw+LhOi79g0MA=", + "owner": "hyprwm", + "repo": "hyprland-plugins", + "rev": "d716d1221348b5bef9d13161876caa91a3e33705", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-plugins", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ], + "systems": [ + "hyprland", + "xdph", + "systems" + ] + }, + "locked": { + "lastModified": 1714869498, + "narHash": "sha256-vbLVOWvQqo4n1yvkg/Q70VTlPbMmTiCQfNTgcWDCfJM=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "e06482e0e611130cd1929f75e8c1cf679e57d161", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1713121246, + "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1714755542, + "narHash": "sha256-D0pg+ZRwrt4lavZ97Ca8clsgbPA3duLj8iEM7riaIFY=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "1270ebaa539e56d61b708c24b072b09cbbd3a828", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1714253743, + "narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 0, + "narHash": "sha256-4cPymbty65RvF1DWQfc+Bc8B233A1BWxJnNULJKQ1EY=", + "path": "/nix/store/p69bcs7ma6ijj8v9xsrg3nq3nn8ryn95-source", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "hyprland": "hyprland", + "hyprland-plugins": "hyprland-plugins", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1714060055, + "narHash": "sha256-j43TS9wv9luaAlpxcxw0sjxkbcc2mGANVR2RYgo3RCw=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "0fe840441e43da12cd7865ed9aa8cdc35a8da85a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..aa2c4bd --- /dev/null +++ b/flake.nix @@ -0,0 +1,33 @@ +{ + description = "Nixos config flake"; + + inputs = { + # nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + hyprland.url = "github:hyprwm/Hyprland"; + hyprland-plugins = { + url = "github:hyprwm/hyprland-plugins"; + inputs.hyprland.follows = "hyprland"; + }; + + # hyprlock = { + # url = "github:hyprwm/hyprlock"; + # inputs.hyprland.follows = "hyprland"; + # }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, ... }@inputs: { + nixosConfigurations.default = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs;}; + modules = [ + ./hosts/default/configuration.nix + inputs.home-manager.nixosModules.default + ]; + }; + }; +} diff --git a/hosts/default/configuration.nix b/hosts/default/configuration.nix new file mode 100644 index 0000000..e945bf1 --- /dev/null +++ b/hosts/default/configuration.nix @@ -0,0 +1,274 @@ +# 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 = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + inputs.home-manager.nixosModules.default + # + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + boot.initrd.luks.devices."luks-ddb552e7-c477-4d71-899b-9224d6782b9f".device = "/dev/disk/by-uuid/ddb552e7-c477-4d71-899b-9224d6782b9f"; + networking.hostName = "scbnb"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + nix.settings.experimental-features = [ "nix-command" "flakes"]; + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # 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 = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable the GNOME Desktop Environment. + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + + # Configure keymap in X11 + services.xserver.xkb= { + layout = "us"; + variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # 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; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.itsscb = { + isNormalUser = true; + description = "itsscb"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + #thunderbird + ]; + }; + + fonts.packages = with pkgs; [ + nerdfonts + ]; + + + + + programs.hyprland = { + enable = true; + # package = inputs.hyprland.packages."${pkgs.system}".hyprland; + # nvidiaPatches = true; + xwayland.enable = true; + }; + + programs.chromium = { + enable=true; + # commandLineArgs = [ + # "--disable-default-apps" + # "--homepage https://start.duckduckgo.com" + # "--start-maximized" + + # ]; + homepageLocation = "https://start.duckduckgo.com"; + extraOpts = { + syncDisabled = true; + BrowserSignin = 0; + PasswordManagerEnabled = false; + SpellcheckEnabled = false; + }; + defaultSearchProviderEnabled= true; + defaultSearchProviderSearchURL = "https://start.duckduckgo.com/?q={searchTerms}"; + }; + environment = { + sessionVariables = { + WLR_NO_HARDWARE_CURSORS = "1"; + NIXOS_OZONE_WL = "1"; + }; + + variables = { + EDITOR = "hx"; + }; + }; + + hardware = { + opengl.enable = true; + nvidia.modesetting.enable = true; + }; + +home-manager = { + extraSpecialArgs = { inherit inputs; }; + backupFileExtension = "backup"; + users = { + "itsscb" = import ./home.nix; + "root" = { + home.stateVersion = "23.11"; + home.file.".config/helix".source = ../../dotfiles/helix; + }; + }; +}; + + # Install firefox. + # programs.firefox.enable = true; +# programs.google-chrome = { +# enable = true; +# defaultBrowser = true; +# }; + +# programs.helix = { +# enabled = true; +# defaultEditor = true; +# }; + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + xdg.portal.enable = true; + # xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + + +# services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + waybar + (waybar.overrideAttrs (oldAttrs: { + mesonFlags = oldAttrs.mesonFlags ++ ["-Dexperimental=true"]; + }) + ) + dunst + libnotify + + swww + dolphin + networkmanagerapplet + alacritty + xdg-desktop-portal-gtk + xdg-desktop-portal-hyprland + rofi-wayland + pavucontrol + hyprlock + # gnomeExtensions.appindicator + + inkscape + gimp + ffmpeg + xclip + eza + bat + ripgrep + git + rustup + helix + thunderbird + + vlc + spotify + ]; + +programs.steam = { + enable = true; +}; + +services.xserver.excludePackages = (with pkgs; [ + nano + xterm +]) ++ ( with pkgs.gnome; [ + cheese + gnome-music + epiphany + geary + totem + tali + iagno + hitori + atomix +]); + +# services.xserver.desktopManager.gnome.extraGSettingsOverrides = '' +# [com.ubuntu.login-screen] +# background-color='#000000' +# background-size='cover' +# background-repeat='no-repeat' +# background-picture-uri='file:///etc/nixos/configs/black.png' +# ''; + +programs.nix-ld.enable = true; +programs.nix-ld.libraries = with pkgs; [ + # Add any missing dynamic libraries for unpackaged + # programs here, NOT in environment.systemPackages +]; + + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # 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.11"; # Did you read the comment? + +} diff --git a/hosts/default/hardware-configuration.nix b/hosts/default/hardware-configuration.nix new file mode 100644 index 0000000..3252b34 --- /dev/null +++ b/hosts/default/hardware-configuration.nix @@ -0,0 +1,42 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/b57531b3-bf78-466e-a2f7-7eab09ce9284"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-1ed60977-b0ee-4751-99f3-05f0b224634b".device = "/dev/disk/by-uuid/1ed60977-b0ee-4751-99f3-05f0b224634b"; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/59A3-0BC5"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/968cd561-fb73-496a-a37a-0e662bf45597"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp59s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/default/home.nix b/hosts/default/home.nix new file mode 100644 index 0000000..8e3a94c --- /dev/null +++ b/hosts/default/home.nix @@ -0,0 +1,278 @@ +{ config, pkgs, inputs, ... }: + +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "itsscb"; + home.homeDirectory = "/home/itsscb"; + + # wayland.windowManager.hyprland = { + # enable = true; + # settings = { + # # "$mod" = "SUPER"; + # "exec-once" = "/etc/nixos/dotfiles/hypr/init.sh"; + # }; + # }; + + # 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. + + programs = { + bash = { + enable = true; + shellAliases = { + ls = "eza -la --git"; + cat = "bat"; + }; + }; + + git = { + enable = true; + userName = "itsscb"; + userEmail = "dev@itsscb.de"; + }; + + chromium = { + enable=true; + commandLineArgs = [ + "--disable-default-apps" + "--homepage https://start.duckduckgo.com" + "--start-maximized" + + ]; + # homepageLocation = "https://start.duckduckgo.com"; + # extraOpts = { + # syncDisabled = true; + # BrowserSignin = 0; + # PasswordManagerEnabled = false; + # SpellcheckEnabled = false; + # }; + # defaultSearchProviderEnabled= true; + # defaultSearchProviderSearchURL = "https://start.duckduckgo.com/?q={searchTerms}"; + }; + }; + + # dconf = { + # enable = true; + # settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; + # settings."org/gnome/desktop/peripherals/touchpad".tap-to-click = true; + # settings."org/gnome/desktop/background".picture-uri-dark = "file:///run/current-system/sw/share/backgrounds/gnome/keys-d.jpg"; + # settings."org/gnome/desktop/background".picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/keys-l.jpg"; + # settings."org/gnome/desktop/background".primary-color = "#aaaaaa"; + # settings."org/gnome/desktop/background".secondary-color = "#000000"; + # settings."org/gnome/desktop/interface".show-battery-percentage = true; + # settings."org/gnome/settings-daemon/plugins/media-keys".home = ["e"]; + # settings."org/gnome/settings-daemon/plugins/media-keys".control-center= ["i"]; + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0".binding= "t"; + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0".command= "gnome-terminal"; + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0".name= "gt1"; + + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1".binding= "t"; + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1".command= "gnome-terminal"; + # settings."org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1".name= "gt2"; + # settings."org/gnome/settings-daemon/plugins/media-keys".custom-keybindings= ["/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"]; + + # }; # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + # # Adds the 'hello' command to your environment. It prints a friendly + # # "Hello, world!" when run. + # pkgs.hello + + # # It is sometimes useful to fine-tune packages, for example, by applying + # # overrides. You can do that directly here, just don't forget the + # # parentheses. Maybe you want to install Nerd Fonts with a limited number of + # # fonts? + # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) + + # # You can also create simple shell scripts directly inside your + # # configuration. For example, this adds a command 'my-hello' to your + # # environment: + # (pkgs.writeShellScriptBin "my-hello" '' + # echo "Hello, ${config.home.username}!" + # '') + ]; +wayland.windowManager.hyprland.enable = true; +# wayland.windowManager.hyprland.plugins = [ +# inputs.hyprlock.packages."${pkgs.system}".hyprlock +# ]; +wayland.windowManager.hyprland.settings = { + + exec-once = [ + "swww-daemon" + "swww img /etc/nixos/dotfiles/hypr/rust.png" + "nm-applet --indicator" + "waybar" + "dunst" + ]; + + "$terminal" = "alacritty"; + "$fileManager" = "dolphin"; + "$menu" = "rofi -show drun"; + + "$mod" = "SUPER"; + + monitor = ",preferred,auto,1"; + + general = { + layout = "master"; + gaps_in = 5; + gaps_out = 20; + border_size = 2; + "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; + "col.inactive_border" = "rgba(595959aa)"; + + allow_tearing = false; + }; + + + decoration = { + rounding = 10; + + blur = { + enabled = true; + size = 3; + passes = 1; + }; + + drop_shadow = "yes"; + shadow_range = 4; + shadow_render_power = 3; + "col.shadow" = "rgba(1a1a1aee)"; + }; + + animations = { + enabled = "yes"; + + bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; + + animation = [ + "windows, 1, 7, myBezier" + "windowsOut, 1, 7, default, popin 80%" + "border, 1, 10, default" + "borderangle, 1, 8, default" + "fade, 1, 7, default" + "workspaces, 1, 6, default" + ]; + + }; + + gestures = { + workspace_swipe = "off"; + }; + + misc = { + force_default_wallpaper = 0; + }; + + windowrulev2 = "suppressevent maximize, class:.*"; + + input = { + # kb_layout = us; + follow_mouse = 2; + + touchpad = { + natural_scroll = "yes"; + }; + + # sensitivity = 0; + }; + + master = { + new_is_master = false; + }; + + # env = [ + # "XCURSOR_SIZE,24" + # "QT_QPA_PLATFORMTHEME,qt5ct" + # ]; + + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + ]; + + bind = + [ + "$mod, T, exec, $terminal" + "$mod, Q, exec, $terminal" + "$mod, M, exit" + "$mod, C, killactive" + "$mod, E, exec, $fileManager" + "$mod, V, exec, togglefloating" + "$mod, R, exec, $menu" + "$mod, P, pseudo," + "$mod, O, togglesplit," + "$mod, U, fullscreen," + "$mod, P, focuscurrentorlast," + "$mod, P, movewindow,l" + "$mod, H, movefocus, l" + "$mod, L, movefocus, r" + "$mod, K, movefocus, u" + "$mod, J, movefocus, d" + "$mod, S, togglespecialworkspace, magic" + "$mod SHIFT, S, movetoworkspace, special:magic" + "$mod, mouse_down, workspace, e+1" + "$mod, mouse_up, workspace, e-1" + ] + ++ ( + # workspaces + # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} + builtins.concatLists (builtins.genList ( + x: let + ws = let + c = (x + 1) / 10; + in + builtins.toString (x + 1 - (c * 10)); + in [ + "$mod, ${ws}, workspace, ${toString (x + 1)}" + "$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}" + ] + ) + 10) + ); + }; # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + ".config/helix".source = ../../dotfiles/helix; + # # 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'. These will be explicitly sourced when using a + # shell provided by Home Manager. 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/itsscb/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + # EDITOR = "emacs"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/shells/rust/rust-toolchain.toml b/shells/rust/rust-toolchain.toml new file mode 100644 index 0000000..292fe49 --- /dev/null +++ b/shells/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "stable" diff --git a/shells/rust/rust.nix b/shells/rust/rust.nix new file mode 100644 index 0000000..381b29c --- /dev/null +++ b/shells/rust/rust.nix @@ -0,0 +1,40 @@ +{ pkgs ? import {} }: + let + overrides = (builtins.fromTOML (builtins.readFile ./rust-toolchain.toml)); + libPath = with pkgs; lib.makeLibraryPath [ + # load external libraries that you need in your rust project here + ]; +in + pkgs.mkShell rec { + buildInputs = with pkgs; [ + clang + # Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16) + llvmPackages.bintools + rustup + ]; + RUSTC_VERSION = overrides.toolchain.channel; + # https://github.com/rust-lang/rust-bindgen#environment-variables + LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; + shellHook = '' + export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin + export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/ + ''; + # Add precompiled library to rustc search path + RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [ + # add libraries here (e.g. pkgs.libvmi) + ]); + LD_LIBRARY_PATH = libPath; + # Add glibc, clang, glib, and other headers to bindgen search path + BINDGEN_EXTRA_CLANG_ARGS = + # Includes normal include path + (builtins.map (a: ''-I"${a}/include"'') [ + # add dev libraries here (e.g. pkgs.libvmi.dev) + pkgs.glibc.dev + ]) + # Includes with special directory paths + ++ [ + ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' + ''-I"${pkgs.glib.dev}/include/glib-2.0"'' + ''-I${pkgs.glib.out}/lib/glib-2.0/include/'' + ]; + }