diff --git a/flake.lock b/flake.lock index 7d4207e..10ce65b 100644 --- a/flake.lock +++ b/flake.lock @@ -251,16 +251,15 @@ ] }, "locked": { - "lastModified": 1715930644, - "narHash": "sha256-W9pyM3/vePxrffHtzlJI6lDS3seANQ+Nqp+i58O46LI=", + "lastModified": 1716711219, + "narHash": "sha256-TnZETiQPXbyT5mdCHMOyrJnx2+BwroMBRrguciz1vEo=", "owner": "nix-community", "repo": "home-manager", - "rev": "e3ad5108f54177e6520535768ddbf1e6af54b59d", + "rev": "05e6ba83eb3585ce0aff7b41e4bd0e317d05ad4a", "type": "github" }, "original": { "owner": "nix-community", - "ref": "master", "repo": "home-manager", "type": "github" } @@ -447,6 +446,29 @@ "type": "github" } }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1716670933, + "narHash": "sha256-E5GqDM3cPvPNyfzt1qF7T0Wei1azp1DwLF9qA0X+5M8=", + "owner": "pjones", + "repo": "plasma-manager", + "rev": "4d38fc602e01cc8d1e93e51677aade86febf3295", + "type": "github" + }, + "original": { + "owner": "pjones", + "repo": "plasma-manager", + "type": "github" + } + }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat_2", @@ -483,6 +505,7 @@ "nixpkgs": "nixpkgs_2", "nixpkgs-unstable": "nixpkgs-unstable", "nixvim": "nixvim", + "plasma-manager": "plasma-manager", "ros": "ros" } }, diff --git a/flake.nix b/flake.nix index 2b5e789..f21a9e3 100644 --- a/flake.nix +++ b/flake.nix @@ -9,9 +9,18 @@ nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; # Also see the 'unstable-packages' overlay at 'overlays/default.nix'. - # Home manager - home-manager.url = "github:nix-community/home-manager/master"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixvim.url = "github:nix-community/nixvim"; + + plasma-manager = { + url = "github:pjones/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; ros.url = "github:lopsided98/nix-ros-overlay"; agenix.url = "github:ryantm/agenix"; @@ -20,7 +29,6 @@ # everything match nicely? Try nix-colors! nix-colors.url = "github:misterio77/nix-colors"; - nixvim.url = "github:nix-community/nixvim"; }; @@ -28,6 +36,8 @@ self, nixpkgs, home-manager, + nixvim, + plasma-manager, ros, agenix, ... @@ -91,18 +101,19 @@ ./nixos/work.nix ]; }; - #Thinkpad E15 Gen 3 Laptop - Type 20YG - Model 20YG003EUS - raziel = nixpkgs.lib.nixosSystem { + #Thinkpad E15 Gen 3 Laptop (ThinkPad) - Type 20YG - Model 20YG003EUS + ariel = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs outputs; - hostname = "raziel"; + hostname = "ariel"; }; modules = [ ./nixos/configuration.nix ./nixos/kde-desktop.nix - ./nixos/cad.nix ./nixos/zerotier.nix ./nixos/work.nix + ./nixos/cad.nix + ./nixos/gaming.nix ]; }; hearth = nixpkgs.lib.nixosSystem { @@ -147,12 +158,12 @@ # Standalone home-manager configuration entrypoint # Available through 'home-manager --flake .#your-username@your-hostname' homeConfigurations = { - "traverseda@athame" = home-manager.lib.homeManagerConfiguration { + "traverseda@generic" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance extraSpecialArgs = {inherit inputs outputs;}; modules = [ # > Our main home-manager configuration file < - ./home-manager/home.nix + ./home-manager/traverseda/home.nix ]; }; }; diff --git a/home-manager/home.nix b/home-manager/traverseda/home.nix similarity index 77% rename from home-manager/home.nix rename to home-manager/traverseda/home.nix index 7313c1a..9fb60cf 100644 --- a/home-manager/home.nix +++ b/home-manager/traverseda/home.nix @@ -10,14 +10,7 @@ }: { # You can import other home-manager modules here imports = [ - # If you want to use modules your own flake exports (from modules/home-manager): - # outputs.homeManagerModules.example - - # Or modules exported from other flakes (such as nix-colors): - # inputs.nix-colors.homeManagerModules.default - - # You can also split up your configuration and import pieces of it here: - # ./nvim.nix + inputs.nixvim.homeManagerModules.nixvim ]; nixpkgs = { @@ -73,22 +66,53 @@ credential = { helper = "cache --timeout=3600"; # Cache credentials for 1 hour (3600 seconds) }; + oh-my-zsh = { + "hide-dirty" = "1"; + }; + init = { + defaultBranch = "main"; + }; }; }; - programs.neovim = { + programs.nixvim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; - vimdiffAlias = true; - plugins = with pkgs.vimPlugins; [ - nvim-lspconfig - nvim-treesitter.withAllGrammars - vim-bufferline - tokyonight-nvim + plugins.bufferline.enable = true; + plugins.which-key.enable = true; + + plugins.cmp-tabby = { + enable = true; + host = "localhost:8337"; + }; + + globals.mapleader = " "; + keymaps = [ { - plugin = which-key-nvim; + mode = "n"; + key = "c"; + options = { noremap = true; desc = "Open new terminal"; }; + action = ":term"; + } + { + mode = "n"; + key = "x"; + options = { noremap = true; desc = "Close tab"; }; + action = ":bd"; + } + { + mode = "n"; + key = "s"; + options = { noremap = true; desc = "Pick buffer"; }; + action = ":BufferLinePick"; + } + { + mode = "t"; + key = ""; + options = { noremap = true; }; + action = ""; } ]; }; @@ -128,19 +152,14 @@ pkgs.wget pkgs.wl-clipboard pkgs.atool + pkgs.zig + pkgs.comma (pkgs.nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Hack"]; }) (pkgs.writeShellScriptBin "nvr-edit" '' nvr --remote-wait $@ '') - (pkgs.writeShellScriptBin "nvidia-offload" '' - export __NV_PRIME_RENDER_OFFLOAD=1 - export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 - export __GLX_VENDOR_LIBRARY_NAME=nvidia - export __VK_LAYER_NV_optimus=NVIDIA_only - exec "$@" - '') ]; programs.zsh = { diff --git a/home-manager/traverseda/kde-desktop.nix b/home-manager/traverseda/kde-desktop.nix new file mode 100644 index 0000000..02f79ab --- /dev/null +++ b/home-manager/traverseda/kde-desktop.nix @@ -0,0 +1,66 @@ + +{ + inputs, + outputs, + lib, + config, + pkgs, + ... +}: +{ + imports = [ + inputs.plasma-manager.homeManagerModules.plasma-manager + ]; + + programs.plasma = { + enable = true; + # workspace = { + # theme = "breeze-dark"; + # colorScheme = "BreezeDark"; + # }; + shortcuts = { + "services/org.kde.konsole.desktop"."_launch" = ["Meta+Return" "Ctrl+Alt+T"]; + "kwin"."Window Close" = ["Meta+Shift+C" "Alt+F4"]; + "kwin"."Cube" = "Meta+C"; + }; + shortcuts.plasmashell = { + "activate task manager entry 1" = ""; + "activate task manager entry 2" = ""; + "activate task manager entry 3" = ""; + "activate task manager entry 4" = ""; + "activate task manager entry 5" = ""; + "activate task manager entry 6" = ""; + "activate task manager entry 7" = ""; + "activate task manager entry 8" = ""; + "activate task manager entry 9" = ""; + }; + shortcuts.kwin = { + "Switch to Desktop 1" = "Meta+1"; + "Window to Desktop 1" = "Meta+!"; + "Switch to Desktop 2" = "Meta+2"; + "Window to Desktop 2" = "Meta+@"; + "Switch to Desktop 3" = "Meta+3"; + "Window to Desktop 3" = "Meta+#"; + "Switch to Desktop 4" = "Meta+4"; + "Window to Desktop 4" = "Meta+$"; + "Switch to Desktop 5" = "Meta+5"; + "Window to Desktop 5" = "Meta+%"; + "Switch to Desktop 6" = "Meta+6"; + "Window to Desktop 6" = "Meta+^"; + "Switch to Desktop 7" = "Meta+7"; + "Window to Desktop 7" = "Meta+&"; + "Switch to Desktop 8" = "Meta+8"; + "Window to Desktop 8" = "Meta+*"; + "Switch to Desktop 9" = "Meta+9"; + "Window to Desktop 9" = "Meta+("; + "Switch to Desktop 10" = "Meta+0"; + "Window to Desktop 10" = "Meta+)"; + }; + configFile = { + "kwinrc"."Desktops"."Number"."value" = 10; + "kwinrc"."Desktops"."Rows"."value" = 2; + "kwinrc"."Plugins"."cubeEnabled" = true; + "kwinrc"."Windows"."FocusPolicy" = "FocusFollowsMouse"; + }; + }; +} diff --git a/nixos/cad.nix b/nixos/cad.nix index 18e2f22..756a79d 100644 --- a/nixos/cad.nix +++ b/nixos/cad.nix @@ -1,10 +1,10 @@ { config, pkgs, lib, ... }: { - environment.systemPackages = with pkgs; [ pkgs.openscad pkgs.blender + #pkgs.py-slvs pkgs.freecad (pkgs.appimageTools.wrapType2 { diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ee16d55..cf8dab1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -76,10 +76,16 @@ #Deduplicate nix store on a timer nix.optimise.automatic = true; + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + }; + 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 - pkgs.neovim pkgs.mosh pkgs.git pkgs.usbutils @@ -133,7 +139,7 @@ extraSpecialArgs = { inherit inputs outputs; }; backupFileExtension = ".bak"; users = { - traverseda = import ../home-manager/home.nix; + traverseda = import ../home-manager/traverseda/home.nix; }; }; diff --git a/nixos/family.nix b/nixos/family.nix index 16e2f3f..4b733f8 100644 --- a/nixos/family.nix +++ b/nixos/family.nix @@ -14,6 +14,10 @@ in isNormalUser = true; extraGroups = [ "networkManager" ]; }; + ingrid = { + isNormalUser = true; + extraGroups = [ "networkManager" ]; + }; bill = { isNormalUser = true; extraGroups = [ "networkManager" ]; diff --git a/nixos/hardware/ariel.nix b/nixos/hardware/ariel.nix new file mode 100644 index 0000000..19ba15e --- /dev/null +++ b/nixos/hardware/ariel.nix @@ -0,0 +1,40 @@ +# 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 = [ "nvme" "xhci_pci" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/fe5ec606-9052-463e-b402-e37dd206b87f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/C746-7DF9"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/654049ca-318f-453d-ad70-9d2a35d42a6d"; } + ]; + + # 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.enp1s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nixos/kde-desktop.nix b/nixos/kde-desktop.nix index a4836f0..7c80055 100644 --- a/nixos/kde-desktop.nix +++ b/nixos/kde-desktop.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ inputs, outputs, lib, config, pkgs, hostname, specialArgs, options, ... }: { # Enable the KDE Desktop Environment. @@ -7,6 +7,9 @@ services.desktopManager.plasma6.enable = true; services.displayManager.sddm.wayland.enable = true; services.displayManager.defaultSession = "plasma"; + services.displayManager = { + autoLogin.enable = lib.mkDefault false; + }; services.flatpak.enable = true; services.packagekit.enable = true; @@ -76,6 +79,14 @@ programs.dconf.enable = true; hardware.bluetooth.enable = true; hardware.bluetooth.powerOnBoot = true; + home-manager = { + extraSpecialArgs = { inherit inputs outputs; }; + backupFileExtension = ".bak"; + users = { + traverseda = import ../home-manager/traverseda/kde-desktop.nix; + }; + }; + #Enable support for my logitech bluetooth peripherals hardware.logitech.wireless.enable = true; hardware.logitech.wireless.enableGraphical = true; diff --git a/nixos/work.nix b/nixos/work.nix index 8f4d135..028c7c2 100644 --- a/nixos/work.nix +++ b/nixos/work.nix @@ -6,6 +6,7 @@ environment.systemPackages = with pkgs; [ pkgs.qgroundcontrol + pkgs.zig pkgs.distrobox pkgs.element-desktop pkgs.act diff --git a/pkgs/blender-cadsketcher/default.nix b/pkgs/blender-cadsketcher/default.nix new file mode 100644 index 0000000..78cd433 --- /dev/null +++ b/pkgs/blender-cadsketcher/default.nix @@ -0,0 +1,57 @@ +{ + description = "Blender CAD Sketcher"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + outputs = { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + in { + devShells.default = pkgs.mkShell { + shellHook = '' + ''; + packages = [ + ( + let + py-slvs = pythonPkgs: + pythonPkgs.buildPythonPackage rec { + pname = "py-slvs"; + version = "1.0.6"; + + src = pythonPkgs.fetchPypi { + pname = "py_slvs"; + version = "1.0.6"; + sha256 = "sha256-U6T/aXy0JTC1ptL5oBmch0ytSPmIkRA8XOi31NpArnI="; + }; + + nativeBuildInputs = with pkgs; [swig]; + pyproject = true; + + propagatedBuildInputs = with pythonPkgs; [ + cmake + ninja + setuptools + scikit-build + ]; + + dontUseCmakeConfigure = true; + + meta = with pkgs.lib; { + description = "Python binding of SOLVESPACE geometry constraint solver"; + homepage = "https://github.com/realthunder/slvs_py"; + license = licenses.gpl3; + }; + }; + + blenderCadSketcher = pkgs.blender.withPackages (p: [(py-slvs p)]); + in + blenderCadSketcher + ) + ]; + }; + }); +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 6762b7f..6a65429 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -6,4 +6,5 @@ { # example = pkgs.callPackage ./example { }; creality-print = pkgs.callPackage ./creality-print { }; + py-slvs = pkgs.callPackage ./py-slvs { }; } diff --git a/pkgs/py-slvs/default.nix b/pkgs/py-slvs/default.nix new file mode 100644 index 0000000..5482acc --- /dev/null +++ b/pkgs/py-slvs/default.nix @@ -0,0 +1,57 @@ +{ + description = "Blender CAD Sketcher"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + outputs = { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + in { + devShells.default = pkgs.mkShell { + shellHook = '' + ''; + packages = [ + ( + let + py-slvs = pythonPkgs: + pythonPkgs.buildPythonPackage rec { + pname = "py-slvs"; + version = "1.0.6"; + + src = pythonPkgs.fetchPypi { + pname = "py_slvs"; + version = "1.0.6"; + sha256 = "sha256-U6T/aXy0JTC1ptL5oBmch0ytSPmIkRA8XOi31NpArnI="; + }; + + nativeBuildInputs = with pkgs; [swig]; + pyproject = true; + + propagatedBuildInputs = with pythonPkgs; [ + cmake + ninja + setuptools + scikit-build + ]; + + dontUseCmakeConfigure = true; + + meta = with pkgs.lib; { + description = "Python binding of SOLVESPACE geometry constraint solver"; + homepage = "https://github.com/realthunder/slvs_py"; + license = licenses.gpl3; + }; + }; + + blenderWithPySlvs = pkgs.blender.withPackages (p: [(py-slvs p)]); + in + blenderWithPySlvs + ) + ]; + }; + }); +}