commit 3113c7f66b1b7391884e0a230b29be94a7dc414f Author: polygon Date: Sat Mar 16 12:21:25 2024 +0000 initial commit diff --git a/home-manager/desktop/flake.lock b/home-manager/desktop/flake.lock new file mode 100644 index 0000000..54225e5 --- /dev/null +++ b/home-manager/desktop/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710062421, + "narHash": "sha256-FiCNRfyUgJOLYIokLiFsfI7B+Zn9HDnOzFR3uVr5qsQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "36f873dfc8e2b6b89936ff3e2b74803d50447e0a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1709961763, + "narHash": "sha256-6H95HGJHhEZtyYA3rIQpvamMKAGoa8Yh2rFV29QnuGw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "3030f185ba6a4bf4f18b87f345f104e6a6961f34", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/home-manager/desktop/flake.nix b/home-manager/desktop/flake.nix new file mode 100644 index 0000000..1b08637 --- /dev/null +++ b/home-manager/desktop/flake.nix @@ -0,0 +1,29 @@ +{ + description = "Home Manager configuration of polygon"; + + inputs = { + # Specify the source of Home Manager and Nixpkgs. + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."polygon" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + + # Specify your home configuration modules here, for example, + # the path to your home.nix. + modules = [ ./home.nix ]; + + # Optionally use extraSpecialArgs + # to pass through arguments to home.nix + }; + }; +} diff --git a/home-manager/desktop/home.nix b/home-manager/desktop/home.nix new file mode 100644 index 0000000..f8b0dff --- /dev/null +++ b/home-manager/desktop/home.nix @@ -0,0 +1,97 @@ +{ config, pkgs, ... }: + +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "polygon"; + home.homeDirectory = "/home/polygon"; + + # 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. + nixpkgs.config.allowUnfree = true; + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = with pkgs; [ + rustup + firefox + thunderbird + hexchat + steam + keepassxc + ]; + + programs = { + neovim.enable = true; + vscode = { + enable = true; + package = pkgs.vscodium; + #extensions = with pkgs.vscode-extensions; [nix-ide rust-lang.rust-analyzer ]; + }; + zsh = { + enable = true; + enableAutosuggestions = true; + oh-my-zsh = { + enable = true; + plugins = [ + "adb" + "rust" + "git" + "common-aliases" + ]; + theme = "bira"; + }; + }; + kitty = { + enable = true; + shellIntegration.enableZshIntegration = true; + theme = "Dark Pride"; + }; + }; + + services = { + syncthing = { + enable = true; + tray.enable = true; + }; + + }; + + # 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 + # + # /etc/profiles/per-user/polygon/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "neovim"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/hosts/common/default.nix b/hosts/common/default.nix new file mode 100644 index 0000000..39ca30a --- /dev/null +++ b/hosts/common/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./sound.nix + ]; +} diff --git a/hosts/common/locales.nix b/hosts/common/locales.nix new file mode 100644 index 0000000..50bcded --- /dev/null +++ b/hosts/common/locales.nix @@ -0,0 +1,24 @@ +{ + config, + pkgs, + ... +}: + +{ + 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"; + }; + + time.timeZone = "Europe/Berlin"; + console.keyMap = "de"; +} \ No newline at end of file diff --git a/hosts/common/sound.nix b/hosts/common/sound.nix new file mode 100644 index 0000000..00aca85 --- /dev/null +++ b/hosts/common/sound.nix @@ -0,0 +1,21 @@ +{ +config, +pkgs, +... +}: + +{ + sound.enable = true; + hardware.pulseaudio.enable = false; + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + services.blueman.enable = true; +} \ No newline at end of file diff --git a/hosts/twinkpad/configuration.nix b/hosts/twinkpad/configuration.nix new file mode 100644 index 0000000..276ed74 --- /dev/null +++ b/hosts/twinkpad/configuration.nix @@ -0,0 +1,95 @@ +# 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, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ./../common + ]; + # enable flakes + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + boot.initrd.luks.devices."luks-b568867f-1d41-4bc6-9639-12b5e23b90c0".device = "/dev/disk/by-uuid/b568867f-1d41-4bc6-9639-12b5e23b90c0"; + networking.hostName = "twinkpad"; + # Enable networking + networking.networkmanager.enable = true; + environment.pathsToLink = [ "/share/zsh" ]; + environment.shells = [ "/home/polygon/.nix-profile/bin/zsh" ]; + # Set your time zone. + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable the KDE Plasma Desktop Environment. + services.xserver.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + + # Configure keymap in X11 + services.xserver = { + layout = "de"; + xkbVariant = ""; + }; + + services.dbus.enable = true; + + # Enable CUPS to print documents. + services.printing.enable = true; + + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.polygon = { + isNormalUser = true; + description = "polygon-system"; + extraGroups = [ "networkmanager" "wheel" ]; + }; + + # Enable automatic login for the user. + services.xserver.displayManager.autoLogin.enable = true; + services.xserver.displayManager.autoLogin.user = "polygon"; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim + wget + kitty + ]; + + # 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/twinkpad/hardware-configuration.nix b/hosts/twinkpad/hardware-configuration.nix new file mode 100644 index 0000000..6a2bd97 --- /dev/null +++ b/hosts/twinkpad/hardware-configuration.nix @@ -0,0 +1,43 @@ +# 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" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/f84ca426-6c93-4b89-a957-462ee3892874"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-b222056c-4062-4e54-8696-4e13be9b7096".device = "/dev/disk/by-uuid/b222056c-4062-4e54-8696-4e13be9b7096"; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/B013-3BBA"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/a514444b-bbbb-4b5e-a7dd-0f0ee6a685c2"; } + ]; + + # 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.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp58s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wwp0s20f0u6i12.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..295a495 --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +echo "Select a machine:" +select machine in machines/*; do + if [ -n "$machine" ]; then + break + else + echo "Invalid selection." + fi +done + +sudo mv /etc/nixos /etc/nixos.bak +sudo mkdir /etc/nixos +sudo ln -s "$(pwd)/$machine/*" /etc/nixos + +read -p "Do you want to symlink home-manager? (y/n): " symlinkHomeManager +if [ "$symlinkHomeManager" = "y" ] || [ "$symlinkHomeManager" = "Y" ]; then + echo -e "\nSelect a home manager configuration:" + select config in home-manager/*; do + if [ -n "$config" ]; then + break + else + echo "Invalid selection." + fi + done + + mv ~/.config/home-manager ~/.config/home-manager.bak + ln -s "$(pwd)/$config" ~/.config/home-manager +else + echo "Skipped symlink for home-manager" +fi + +echo "Task completed successfully." +