diff --git a/modules/home-manager/programs/neovim/.neoconf.json b/.neoconf.json similarity index 100% rename from modules/home-manager/programs/neovim/.neoconf.json rename to .neoconf.json diff --git a/modules/home-manager/programs/neovim/.stylua.toml b/.stylua.toml similarity index 100% rename from modules/home-manager/programs/neovim/.stylua.toml rename to .stylua.toml diff --git a/README.md b/README.md new file mode 100644 index 0000000..1dfabaa --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# linuxware + +This repository contains the configuration of my main Linux based system(s), currently this repository consist of a +[NixOS] system configuration alongside [dotfiles] generated by [Home Manager] and [dotfiles] maintained by me. + +## Navigation guide + +In this section I will detail how you can navigate and make the most use out of my configuration. + +### File structure + +- [`flake.nix` & `flake.lock`](#flake) + - _This is the "entry-point" of the [NixOS] configuration._ +- [`hosts/`](/hosts/) + - _Inside you can find the per-system customizations I've made._ +- [`modules/`](/modules/) + - _These contain the modules I export in the [flake](#flake)._ +- [`packages/`](/packages/) + - _Encompasses the packages I maintain outside or in tandem with [nixpkgs]._ +- [`shared/`](/shared/) + - _The [NixOS] and [Home Manager] configuration that's shared across hosts._ +- [`assets/`](/assets/) + - _All media used in this configuration or shown inside READMEs._ + +> _Be sure to click the hyperlinks for the relevant documentation._ + +#### Flake + +A flake basically contains what you want to consume in your environment and what you want to export to be consumed, on +top of having a lockfile to pin the versions of what you are consuming. + +Personally, the best way to learn how to use it as a beginner is the [Unofficial NixOS & Flakes +Book](https://nixos-and-flakes.thiscute.world/). I will not explain how to configure or use my flake as that would be +lenghty. + +I export four modules that you can use in your configuration: +- [Hyprland NixOS configuration](/modules/hyprland/README.md) + - _Accessed through `.nixosModules.hyprland`._ +- [Hyprland home-manager configuration](/modules/hyprland/README.md#configuration) + - _Accessed through `.homeManagerModules.hyprland`._ +- [Emacs home-manager configuration & dotfiles](/modules/emacs/README.md) + - _Accessed through `.homeManagerModules.emacs`_ +- [Neovim home-manager configuration & dotfiles](/modules/neovim/README.md) + - _Accessed through `.homeManagerModules.neovim`._ + +> _Be sure to click the hyperlinks for the relevant documentation._ + +To facilitate on-boarding, once you've set-up the experimental features needed for flakes I have provided a template +with this repository for you to use; it comes with a [NixOS] system configuration, [Home Manager] configuration +alongside the modules that I provide. + +All you have to do is enter the directory you want your configuration to reside and execute +`nix flake init -t github:wizardlink/linuxware`. Be sure to read the `README.md` file! + +## Desktop screenshot + +![image](/assets/screenshots/full-system.png) + +> _All screenshots of the system and it's components are available [here](/assets/README.md)._ + + + + +[dotfiles]: https://wiki.archlinux.org/title/Dotfiles +[home manager]: https://github.com/nix-community/home-manager +[nixos]: https://nixos.org/ +[nixpkgs]: https://github.com/NixOS/nixpkgs/ diff --git a/modules/home-manager/theming/Catppuccin-Frappe.theme b/assets/README.md similarity index 100% rename from modules/home-manager/theming/Catppuccin-Frappe.theme rename to assets/README.md diff --git a/assets/screenshots/doomemacs.png b/assets/screenshots/doomemacs.png new file mode 100644 index 0000000..b481f63 Binary files /dev/null and b/assets/screenshots/doomemacs.png differ diff --git a/assets/screenshots/fastfetch-wizdesk.png b/assets/screenshots/fastfetch-wizdesk.png new file mode 100644 index 0000000..0a1b2c4 Binary files /dev/null and b/assets/screenshots/fastfetch-wizdesk.png differ diff --git a/assets/screenshots/full-system.png b/assets/screenshots/full-system.png new file mode 100644 index 0000000..b5000f2 Binary files /dev/null and b/assets/screenshots/full-system.png differ diff --git a/assets/screenshots/hyprland-active.png b/assets/screenshots/hyprland-active.png new file mode 100644 index 0000000..9f7240a Binary files /dev/null and b/assets/screenshots/hyprland-active.png differ diff --git a/assets/screenshots/hyprland-gaps.png b/assets/screenshots/hyprland-gaps.png new file mode 100644 index 0000000..65f0507 Binary files /dev/null and b/assets/screenshots/hyprland-gaps.png differ diff --git a/assets/screenshots/hyprland-inactive.png b/assets/screenshots/hyprland-inactive.png new file mode 100644 index 0000000..ddf018a Binary files /dev/null and b/assets/screenshots/hyprland-inactive.png differ diff --git a/modules/home-manager/programs/neovim/docs/example_1.png b/assets/screenshots/neovim-dashboard.png similarity index 100% rename from modules/home-manager/programs/neovim/docs/example_1.png rename to assets/screenshots/neovim-dashboard.png diff --git a/modules/home-manager/programs/neovim/docs/example_2.png b/assets/screenshots/neovim-nix.png similarity index 100% rename from modules/home-manager/programs/neovim/docs/example_2.png rename to assets/screenshots/neovim-nix.png diff --git a/modules/home-manager/programs/neovim/docs/example_3.png b/assets/screenshots/neovim-rust.png similarity index 100% rename from modules/home-manager/programs/neovim/docs/example_3.png rename to assets/screenshots/neovim-rust.png diff --git a/assets/screenshots/rofi.png b/assets/screenshots/rofi.png new file mode 100644 index 0000000..5bd81c3 Binary files /dev/null and b/assets/screenshots/rofi.png differ diff --git a/assets/screenshots/waybar.png b/assets/screenshots/waybar.png new file mode 100644 index 0000000..e024b03 Binary files /dev/null and b/assets/screenshots/waybar.png differ diff --git a/modules/nixos/theming/sddm/Background.jpg b/assets/sddm/Background.jpg similarity index 100% rename from modules/nixos/theming/sddm/Background.jpg rename to assets/sddm/Background.jpg diff --git a/flake.nix b/flake.nix index ec24761..d60ceef 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,6 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - spicetify-nix = { url = "github:Gerg-L/spicetify-nix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -42,13 +41,13 @@ let specialArgs = inputs; modules = [ - ./specific/desktop/nixos.nix + ./hosts/wizdesk/nixos.nix home-manager.nixosModules.home-manager { home-manager.extraSpecialArgs = inputs; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.wizardlink = import ./specific/desktop/home-manager.nix; + home-manager.users.wizardlink = import ./hosts/wizdesk/home-manager.nix; } ]; in @@ -58,13 +57,13 @@ let specialArgs = inputs; modules = [ - ./specific/laptop/nixos.nix + ./hosts/wizlap/nixos.nix home-manager.nixosModules.home-manager { home-manager.extraSpecialArgs = inputs; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.wizardlink = import ./specific/laptop/home-manager.nix; + home-manager.users.wizardlink = import ./hosts/wizlap/home-manager.nix; } ]; in @@ -73,10 +72,25 @@ formatter."${system}" = pkgs.nixfmt-rfc-style; + packages."${system}" = { + wb32dfu-udev-rules = pkgs.callPackage ./packages/wb32dfu-udev-rules { }; + zenergy = pkgs.callPackage ./packages/zenergy.nix { }; + }; + + nixosModules = { + hyprland = import ./modules/hyprland/nixos.nix; + }; + homeManagerModules = { - emacsConfig = import ./modules/home-manager/programs/emacs; - hyprlandConfig = import ./modules/home-manager/programs/hyprland; - neovim = import ./modules/home-manager/programs/neovim; + emacs = import ./modules/emacs; + hyprland = import ./modules/hyprland/home-manager.nix; + neovim = import ./modules/neovim; + }; + + templates.default = { + path = ./modules/template; + description = "A NixOS & Home-Manager template to get started with the https://github.com/wizardlink/linuxware + configuration."; }; }; } diff --git a/hosts/README.md b/hosts/README.md new file mode 100644 index 0000000..c9c75ee --- /dev/null +++ b/hosts/README.md @@ -0,0 +1,15 @@ +## wizdesk + +My main machine, this is where I host everything that's accessible through the `thewizard.link` domain. + +### Specs + +![image](/assets/screenshots/fastfetch-wizdesk.png) + +## wizlap + +My ASUS Vivobook 15 (M1502IA), I mostly use it when I have to travel so there isn't much to say about it. + +### Specs + +They can be found in ASUS' store/support page, I haven't modified it yet. diff --git a/specific/desktop/hardware-configuration.nix b/hosts/wizdesk/hardware-configuration.nix similarity index 100% rename from specific/desktop/hardware-configuration.nix rename to hosts/wizdesk/hardware-configuration.nix diff --git a/specific/desktop/home-manager.nix b/hosts/wizdesk/home-manager.nix similarity index 92% rename from specific/desktop/home-manager.nix rename to hosts/wizdesk/home-manager.nix index a89a4f7..b6a0de7 100644 --- a/specific/desktop/home-manager.nix +++ b/hosts/wizdesk/home-manager.nix @@ -7,11 +7,11 @@ # Import configurations for better modularity. imports = [ - ../../modules/home-manager - ./services/openttd.nix - ./services/terraria.nix - ./services/hydractify-bot.nix - ./services/gakuen-cosplay-api.nix + ../../modules/emacs + ../../modules/hyprland/home-manager.nix + ../../modules/neovim + ../../shared/home-manager + ./services/home-manager ]; # Home Manager needs a bit of information about you and the paths it should @@ -28,11 +28,6 @@ # release notes. home.stateVersion = "23.05"; # Please read the comment before changing. - home.sessionVariables = { - EDITOR = "nvim"; - MANPAGER = "nvim +Man!"; - }; - home.file = { # Create wallpaper script to be read by the start_services.sh script. ".local/share/scripts/wallpaper.sh" = { @@ -137,6 +132,13 @@ screenshot.enable = true; }; + # Enable hypridle and hyprlock + hypridle.enable = true; + hyprlock = { + enable = true; + background = "/mnt/internal/personal/wallpapers/wallhaven-2em8y6.jpg"; + }; + # Add monitor configuration to hyprland extraConfig = # hyprlang '' diff --git a/specific/desktop/nixos.nix b/hosts/wizdesk/nixos.nix similarity index 79% rename from specific/desktop/nixos.nix rename to hosts/wizdesk/nixos.nix index de5dbe0..08ec555 100644 --- a/specific/desktop/nixos.nix +++ b/hosts/wizdesk/nixos.nix @@ -1,11 +1,11 @@ -{ pkgs, ... }: +{ pkgs, config, ... }: { imports = [ - ../../modules/nixos + ../../modules/hyprland/nixos.nix + ../../shared/nixos ./hardware-configuration.nix - ./hardware.nix - ./services.nix + ./services/nixos ]; # @@ -134,11 +134,36 @@ }; # - # NETWORK # + # HARDWARE # # - # Enable WOL on my ethernet interface. - networking.interfaces.enp5s0.wakeOnLan.enable = true; + # Enable Zenergy + boot.initrd.kernelModules = [ + "zenergy" + ]; + boot.extraModulePackages = [ + config.boot.kernelPackages.zenergy + ]; + + # Enable openrazer for managing Razer products' configuration + hardware.openrazer = { + enable = true; + users = [ "wizardlink" ]; + }; + + services.udev = { + # Vial udev rule for Monsgeek M1 + extraRules = '' + # Monsgeek M1 + KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="fffe", ATTRS{idProduct}=="0005", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl" + ''; + + # WB32 DFU rules - needed for flashing + packages = [ (pkgs.callPackage ../../packages/wb32dfu-udev-rules { }) ]; + }; + + # enable a better driver for wireless xbox controllers. + hardware.xpadneo.enable = true; # # PACKAGES # diff --git a/hosts/wizdesk/services/home-manager/default.nix b/hosts/wizdesk/services/home-manager/default.nix new file mode 100644 index 0000000..9cc2172 --- /dev/null +++ b/hosts/wizdesk/services/home-manager/default.nix @@ -0,0 +1,10 @@ +{ ... }: + +{ + imports = [ + ./gakuen-cosplay-api.nix + ./hydractify-bot.nix + ./openttd.nix + ./terraria.nix + ]; +} diff --git a/specific/desktop/services/gakuen-cosplay-api.nix b/hosts/wizdesk/services/home-manager/gakuen-cosplay-api.nix similarity index 100% rename from specific/desktop/services/gakuen-cosplay-api.nix rename to hosts/wizdesk/services/home-manager/gakuen-cosplay-api.nix diff --git a/specific/desktop/services/hydractify-bot.nix b/hosts/wizdesk/services/home-manager/hydractify-bot.nix similarity index 100% rename from specific/desktop/services/hydractify-bot.nix rename to hosts/wizdesk/services/home-manager/hydractify-bot.nix diff --git a/specific/desktop/services/openttd.nix b/hosts/wizdesk/services/home-manager/openttd.nix similarity index 100% rename from specific/desktop/services/openttd.nix rename to hosts/wizdesk/services/home-manager/openttd.nix diff --git a/specific/desktop/services/terraria.nix b/hosts/wizdesk/services/home-manager/terraria.nix similarity index 100% rename from specific/desktop/services/terraria.nix rename to hosts/wizdesk/services/home-manager/terraria.nix diff --git a/specific/desktop/services/archi.nix b/hosts/wizdesk/services/nixos/archi.nix similarity index 100% rename from specific/desktop/services/archi.nix rename to hosts/wizdesk/services/nixos/archi.nix diff --git a/specific/desktop/services/caddy.nix b/hosts/wizdesk/services/nixos/caddy.nix similarity index 100% rename from specific/desktop/services/caddy.nix rename to hosts/wizdesk/services/nixos/caddy.nix diff --git a/hosts/wizdesk/services/nixos/default.nix b/hosts/wizdesk/services/nixos/default.nix new file mode 100644 index 0000000..fcdcf83 --- /dev/null +++ b/hosts/wizdesk/services/nixos/default.nix @@ -0,0 +1,12 @@ +{ ... }: + +{ + imports = [ + ./archi.nix + ./caddy.nix + ./forgejo.nix + ./jellyfin.nix + ./nix-serve.nix + ./postgresql.nix + ]; +} diff --git a/specific/desktop/services/forgejo.nix b/hosts/wizdesk/services/nixos/forgejo.nix similarity index 100% rename from specific/desktop/services/forgejo.nix rename to hosts/wizdesk/services/nixos/forgejo.nix diff --git a/specific/desktop/services/jellyfin.nix b/hosts/wizdesk/services/nixos/jellyfin.nix similarity index 100% rename from specific/desktop/services/jellyfin.nix rename to hosts/wizdesk/services/nixos/jellyfin.nix diff --git a/specific/desktop/services/nix-serve.nix b/hosts/wizdesk/services/nixos/nix-serve.nix similarity index 100% rename from specific/desktop/services/nix-serve.nix rename to hosts/wizdesk/services/nixos/nix-serve.nix diff --git a/specific/desktop/services/postgresql.nix b/hosts/wizdesk/services/nixos/postgresql.nix similarity index 100% rename from specific/desktop/services/postgresql.nix rename to hosts/wizdesk/services/nixos/postgresql.nix diff --git a/specific/laptop/hardware-configuration.nix b/hosts/wizlap/hardware-configuration.nix similarity index 100% rename from specific/laptop/hardware-configuration.nix rename to hosts/wizlap/hardware-configuration.nix diff --git a/specific/laptop/home-manager.nix b/hosts/wizlap/home-manager.nix similarity index 96% rename from specific/laptop/home-manager.nix rename to hosts/wizlap/home-manager.nix index 4d127fc..3bd259d 100644 --- a/specific/laptop/home-manager.nix +++ b/hosts/wizlap/home-manager.nix @@ -7,7 +7,10 @@ # Import configurations for better modularity. imports = [ - ../../modules/home-manager + ../../modules/emacs + ../../modules/hyprland/home-manager.nix + ../../modules/neovim + ../../shared/home-manager ]; # Home Manager needs a bit of information about you and the paths it should @@ -24,11 +27,6 @@ # release notes. home.stateVersion = "23.05"; # Please read the comment before changing. - home.sessionVariables = { - EDITOR = "nvim"; - MANPAGER = "nvim +Man!"; - }; - home.file = { # Create wallpaper script to be read by the start_services.sh script. ".local/share/scripts/wallpaper.sh" = { diff --git a/specific/laptop/nixos.nix b/hosts/wizlap/nixos.nix similarity index 82% rename from specific/laptop/nixos.nix rename to hosts/wizlap/nixos.nix index 792bbec..61437fc 100644 --- a/specific/laptop/nixos.nix +++ b/hosts/wizlap/nixos.nix @@ -1,10 +1,10 @@ -{ ... }: +{ config, ... }: { imports = [ - ../../modules/nixos + ../../modules/hyprland/nixos.nix + ../../shared/nixos ./hardware-configuration.nix - ./hardware.nix ]; # @@ -19,6 +19,9 @@ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "23.05"; + # Consume my desktop's binary cache. This is specially useful since (in theory) + # I will always update the flake and desktop machine first, so when I pull the changes, + # my desktop will have all the binaries my laptop needs. nix.settings.substituters = [ "http://192.168.0.100:7373" ]; nix.settings.trusted-public-keys = [ "wizdesk-1:2UvctPjiMwMs7r2r7VPvoPmh4OcUjY3JmaRDJnOTZY8=" @@ -97,4 +100,19 @@ LC_TIME = "en_GB.UTF-8"; }; }; + + # + # HARDWARE # + # + + # Enable Zenergy + boot.initrd.kernelModules = [ + "zenergy" + ]; + boot.extraModulePackages = [ + config.boot.kernelPackages.zenergy + ]; + + # enable a better driver for wireless xbox controllers. + hardware.xpadneo.enable = true; } diff --git a/modules/README.md b/modules/README.md new file mode 100644 index 0000000..70ef9b1 --- /dev/null +++ b/modules/README.md @@ -0,0 +1,8 @@ +This directory encompasses all modules/resources that are exported by this repository's flake. + +## Currently maintained modules + +- [hyprland](./hyprland) +- [neovim](./neovim) +- [emacs](./emacs) +- [template](./template) diff --git a/modules/emacs/README.md b/modules/emacs/README.md new file mode 100644 index 0000000..ea139eb --- /dev/null +++ b/modules/emacs/README.md @@ -0,0 +1,6 @@ +This module has no options, it simply just adds the necessary packages to run +[DOOM Emacs](https://github.com/doomemacs/doomemacs) and writes contents inside [./doom](./doom) into `$XDG_CONFIG_HOME/doom`. + +## Screenshots + +![image](/assets/screenshots/doomemacs.png) diff --git a/modules/home-manager/programs/emacs/default.nix b/modules/emacs/default.nix similarity index 100% rename from modules/home-manager/programs/emacs/default.nix rename to modules/emacs/default.nix diff --git a/modules/home-manager/programs/emacs/doom/config.el b/modules/emacs/doom/config.el similarity index 100% rename from modules/home-manager/programs/emacs/doom/config.el rename to modules/emacs/doom/config.el diff --git a/modules/home-manager/programs/emacs/doom/init.el b/modules/emacs/doom/init.el similarity index 100% rename from modules/home-manager/programs/emacs/doom/init.el rename to modules/emacs/doom/init.el diff --git a/modules/home-manager/programs/emacs/doom/packages.el b/modules/emacs/doom/packages.el similarity index 100% rename from modules/home-manager/programs/emacs/doom/packages.el rename to modules/emacs/doom/packages.el diff --git a/modules/home-manager/programs/emacs/doom/snippets/org-mode/daily.org b/modules/emacs/doom/snippets/org-mode/daily.org similarity index 100% rename from modules/home-manager/programs/emacs/doom/snippets/org-mode/daily.org rename to modules/emacs/doom/snippets/org-mode/daily.org diff --git a/modules/home-manager/programs/emacs/doom/templates/roam/daily.org b/modules/emacs/doom/templates/roam/daily.org similarity index 100% rename from modules/home-manager/programs/emacs/doom/templates/roam/daily.org rename to modules/emacs/doom/templates/roam/daily.org diff --git a/modules/home-manager/packages.nix b/modules/home-manager/packages.nix deleted file mode 100644 index 44cbfc9..0000000 --- a/modules/home-manager/packages.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ pkgs, clipboard-sync, ... }: - -{ - imports = [ - ./programs - ]; - - # The home.packages option allows you to install Nix packages into your - # environment. - home.packages = with pkgs; [ - # # 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}!" - # '') - - ## Tools - # Utilities - fastfetch - firefox - pavucontrol - protonvpn-gui - qbittorrent - qdirstat - speedcrunch - vlc - yt-dlp - zathura - - # Personal utilities - anki - ledger - (vesktop.override { - # FIXME: Need to pin until https://github.com/NixOS/nixpkgs/issues/380429 gets resolved. - electron = electron_33; - }) - - # Editing - libreoffice - - # Creative work - aseprite - blender - krita - lmms - orca-slicer - shotcut - vcv-rack - vhs - - ## Entertainment - jellyfin-media-player - - # Gaming - gamescope - heroic - protontricks - wineWowPackages.unstableFull - winetricks - - # Games - openttd - prismlauncher - shattered-pixel-dungeon - xonotic - - ## Libraries - libsForQt5.kdegraphics-thumbnailers - libsForQt5.kio-extras - rnnoise-plugin - - ## Development - beekeeper-studio - godot_4 - hoppscotch - lazygit - - ## Desktop environment - clipboard-sync.packages.${pkgs.stdenv.hostPlatform.system}.default - cliphist - grim - libsForQt5.ark - loupe - mako - slurp - swww - - # Mail client - thunderbird - ]; -} diff --git a/modules/home-manager/programs/neovim/README.md b/modules/home-manager/programs/neovim/README.md deleted file mode 100644 index 7c567f9..0000000 --- a/modules/home-manager/programs/neovim/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# My [Home Manager] module for neovim configuration - -This is my personal configuration for _[neovim]_ using [Nix](https://nixos.org/), so this will not work outside of it - though it can be made to be. - -In this case, I am outputting a [Home Manager] module to be used directly in your configuration, it currently barely has -any -options and is opinionated due to it being my personal configuration for daily use... But I plan to slowly add options -to make it usable by other people. - -## Installing - -First you add this repository as a flake input: - -```nix -{ - inputs = { - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - wizardlink.url = "git+https://git.thewizard.link/wizardlink/linuxware"; - }; - - outputs = { home-manager, ... }@inputs: { - homeConfigurations.YOURHOSTNAME = home-manager.lib.homeManagerConfiguration { - # ... - extraSPecialArgs = inputs; - }; - }; -} -``` - -Then in your [Home Manager] configuration you can just import it: - -```nix -{ wizardlink }: - -{ - imports = [ - wizardlink.homeManagerModules.neovim - ]; -} -``` - -## Configuring - -### [nixd](https://github.com/nix-community/nixd/) - -```nix -programs.neovim.flake = { - hostname = "nixos"; # Your hostname used to build your system. - location = "git+file:///home/wizardlink/.system"; # Where you store your flake. -}; -``` - -## My neovim failed because of package X not existing - -My configuration is based off of `nixos-unstable` so sometimes your package may not exist or have a different name, I -apologise for that but I don't plan on maintaining backwards compatibility. :( - -## How it looks - -Here's some screenshots of how it currently looks like: - -![image](./docs/example_1.png) -![image](./docs/example_2.png) -![image](./docs/example_3.png) - -The theme I'm using is [catppuccin](https://github.com/catppuccin) in case you're curious. - -[neovim]: https://neovim.io/ -[Home Manager]: https://github.com/nix-community/home-manager diff --git a/modules/hyprland/README.md b/modules/hyprland/README.md new file mode 100644 index 0000000..6d2ca48 --- /dev/null +++ b/modules/hyprland/README.md @@ -0,0 +1,60 @@ +The [NixOS] module installs [Hyprland] onto the system. + +Whilst the [Home Manager] module generates the dotfiles for [Hyprland] and optionally [hyprlock] and [hypridle]. + +It can be configured through `modules.hyprland`. + +## Module options + +### extraConfig + +`modules.hyprland.extraConfig` when set will be appended to the top of the configuration I generate, you can see where +that is [here](./home-manager.nix#L189). + +There are no monitors configured by default, so you should use this option to do so. + +### hypridle.enable + +Whether to configure and enable the [hypridle] package. Be mindful that it may not auto-start, I have yet to find why but +even though it configures to start after `graphical-session.target`, that isn't reached in Hyprland sometimes. + +### hyprlock.enable + +Whether to configure and enable the [hyprlock] package, by itself it does nothing but when [hypridle] is also enabled it +will automatically call [hyprlock] after a 120 second timeout. + +### hyprlock.background + +A path to an image that will be used as background when [hyprlock] is invoked. + +### scripts.screenshot.enable + +When enabled it will create two script files in `$XDG_DATA_HOME/scripts/hyprland` and two keybinds for you to run these +scripts, allowing you to take screenshots of a region and the entire screen of your first monitor. + +### scripts.startup.enable + +Not my proudest option, this will add two packages containing a startup script for apps that I use in the daily & +services. If this module ever gets actually used by someone, then I'll refine it. + +## Visuals + +### Active window + +![image](/assets/screenshots/hyprland-active.png) + +### Inactive window + +![image](/assets/screenshots/hyprland-inactive.png) + +### Gaps + +![image](/assets/screenshots/hyprland-gaps.png) + + + +[hyprland]: https://hyprland.org/ +[hyprlock]: https://github.com/hyprwm/hyprlock +[hypridle]: https://github.com/hyprwm/hypridle +[home manager]: https://github.com/nix-community/home-manager +[nixos]: https://nixos.org diff --git a/modules/home-manager/programs/hyprland/default.nix b/modules/hyprland/home-manager.nix similarity index 92% rename from modules/home-manager/programs/hyprland/default.nix rename to modules/hyprland/home-manager.nix index 6f82512..5a83cfe 100644 --- a/modules/home-manager/programs/hyprland/default.nix +++ b/modules/hyprland/home-manager.nix @@ -21,6 +21,18 @@ in description = "Configuration to be appended to my own."; }; + hypridle.enable = lib.mkEnableOption "hypridle"; + + hyprlock = { + enable = lib.mkEnableOption "hyprlock"; + background = lib.mkOption { + type = lib.types.path; + default = ""; + example = "~/wallpapers/abc.png"; + description = "The image to be used as background for hyprlock."; + }; + }; + scripts = { screenshot.enable = lib.mkEnableOption "screenshot"; startup.enable = lib.mkEnableOption "startup"; @@ -28,13 +40,18 @@ in }; config = { + home.sessionVariables = { + NIXOS_OZONE_WL = "1"; + QT_QPA_PLATFORM = "wayland"; + }; + xdg.configFile."hypr/frappe.conf".source = builtins.fetchurl { url = "https://raw.githubusercontent.com/catppuccin/hyprland/main/themes/frappe.conf"; sha256 = "1clw669i1n3dhawdw4clmjv75fy3smycb5iqk3sanzpr3y0i4vwx"; }; # Enable hypridle and hyprlock - services.hypridle = { + services.hypridle = lib.mkIf cfg.hypridle.enable { enable = true; settings = { general = { @@ -43,21 +60,24 @@ in lock_cmd = "hyprlock"; }; - listener = [ - { - timeout = 120; - on-timeout = "hyprlock"; - } - { - timeout = 180; - on-timeout = "hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - ]; + listener = + [ + { + timeout = 180; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ] + ++ lib.optionals cfg.hyprlock.enable [ + { + timeout = 120; + on-timeout = "hyprlock"; + } + ]; }; }; - programs.hyprlock = { + programs.hyprlock = lib.mkIf cfg.hyprlock.enable { enable = true; extraConfig = # hyprlang '' @@ -76,7 +96,7 @@ in # BACKGROUND background { monitor = - path = $HOME/internal/personal/wallpapers/wallhaven-2em8y6.jpg + path = ${cfg.hyprlock.background} blur_passes = 0 color = $base } diff --git a/modules/hyprland/nixos.nix b/modules/hyprland/nixos.nix new file mode 100644 index 0000000..13be110 --- /dev/null +++ b/modules/hyprland/nixos.nix @@ -0,0 +1,26 @@ +{ pkgs, hyprland, ... }: + +let + hyprland-pkgs = hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + # Enable Hyprland's cachix + nix.settings.substituters = [ "https://hyprland.cachix.org" ]; + nix.settings.trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; + + # Enable Hyprland + programs.hyprland = { + enable = true; + + package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; + portalPackage = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; + }; + + # Overwrite the Mesa packages with Hyprland's for consitency + hardware.graphics = { + package = hyprland-pkgs.mesa.drivers; + package32 = hyprland-pkgs.pkgsi686Linux.mesa.drivers; + }; +} diff --git a/modules/home-manager/programs/hyprland/scripts/screenshot.sh b/modules/hyprland/scripts/screenshot.sh similarity index 100% rename from modules/home-manager/programs/hyprland/scripts/screenshot.sh rename to modules/hyprland/scripts/screenshot.sh diff --git a/modules/home-manager/programs/hyprland/scripts/screenshot_area.sh b/modules/hyprland/scripts/screenshot_area.sh similarity index 100% rename from modules/home-manager/programs/hyprland/scripts/screenshot_area.sh rename to modules/hyprland/scripts/screenshot_area.sh diff --git a/modules/home-manager/programs/hyprland/scripts/start_apps.nix b/modules/hyprland/scripts/start_apps.nix similarity index 100% rename from modules/home-manager/programs/hyprland/scripts/start_apps.nix rename to modules/hyprland/scripts/start_apps.nix diff --git a/modules/home-manager/programs/hyprland/scripts/start_services.nix b/modules/hyprland/scripts/start_services.nix similarity index 100% rename from modules/home-manager/programs/hyprland/scripts/start_services.nix rename to modules/hyprland/scripts/start_services.nix diff --git a/modules/neovim/README.md b/modules/neovim/README.md new file mode 100644 index 0000000..90c2cb3 --- /dev/null +++ b/modules/neovim/README.md @@ -0,0 +1,43 @@ +This module generates dotfiles for [neovim]. + +The module extends `programs.neovim`. + +## Module options + +### programs.neovim.nixd.hostname + +By default [nixd] is enabled, you **need** to pass the current machine's +hostname that is used to generate your system. + +### programs.neovim.nixd.location + +The location of your system's flake, [nixd] will execute an expression defined in the LSP's configuration that reads +the flake's contents to evaluate [NixOS] and [Home Manager] options. + +### programs.neovim.ollama.enable + +Whether to add an [ollama] package to be used with [ollama.nvim](https://github.com/nomnivore/ollama.nvim). + +### programs.neovim.ollama.type + +The type of [ollama] package to be added, valid options are: `amd`, `nvidia` or `cpu`. + +## My neovim failed because of package X not existing + +My configuration is based off of `nixos-unstable` so sometimes your package may not exist or have a different name, I +apologise for that but I don't plan on maintaining backwards compatibility. :( + +## How it looks + +Here's some screenshots of how it currently looks like: + +![image](/assets/screenshots/neovim-dashboard.png) +![image](/assets/screenshots/neovim-nix.png) +![image](/assets/screenshots/neovim-rust.png) + +The theme I'm using is [catppuccin](https://github.com/catppuccin) in case you're curious. + +[neovim]: https://neovim.io/ +[Home Manager]: https://github.com/nix-community/home-manager +[nixd]: https://github.com/nix-community/nixd/ +[ollama]: https://ollama.com/ diff --git a/modules/home-manager/programs/neovim/default.nix b/modules/neovim/default.nix similarity index 57% rename from modules/home-manager/programs/neovim/default.nix rename to modules/neovim/default.nix index 49e17f3..1071932 100644 --- a/modules/home-manager/programs/neovim/default.nix +++ b/modules/neovim/default.nix @@ -56,81 +56,89 @@ in }; config = { + home.sessionVariables = { + EDITOR = "nvim"; + MANPAGER = "nvim +Man!"; + }; + programs.neovim = { withNodeJs = true; withPython3 = true; extraLuaConfig = builtins.readFile ./init.lua; - extraPackages = with pkgs; [ - # Needed by ollama.nvim - curl - ollamaPackage + extraPackages = + with pkgs; + [ + # Needed by LuaSnip + luajitPackages.jsregexp - # Needed by LuaSnip - luajitPackages.jsregexp + # Treesitter + gcc # For compiling languages - # Treesitter - gcc # For compiling languages + # CMAKE + neocmakelsp - # CMAKE - neocmakelsp + # C/C++ + clang-tools + vscode-extensions.ms-vscode.cpptools - # C/C++ - clang-tools - vscode-extensions.ms-vscode.cpptools + # C# + #csharp-ls Testing roslyn.nvim + roslyn-ls + rzls + csharpier + netcoredbg - # C# - #csharp-ls Testing roslyn.nvim - roslyn-ls - rzls - csharpier - netcoredbg + # HTML/CSS/JSON + emmet-ls + vscode-langservers-extracted - # HTML/CSS/JSON - emmet-ls - vscode-langservers-extracted + # LUA + lua-language-server + stylua - # LUA - lua-language-server - stylua + # Markdown + markdownlint-cli + marksman - # Markdown - markdownlint-cli - marksman + # Nix + deadnix + nixd + nixfmt-rfc-style + statix - # Nix - deadnix - nixd - nixfmt-rfc-style - statix + # Python + basedpyright + python312Packages.flake8 + ruff - # Python - basedpyright - python312Packages.flake8 - ruff + # TypeScript/JavaScript + vtsls + deno + vscode-js-debug - # TypeScript/JavaScript - vtsls - deno - vscode-js-debug + # Rust + rust-analyzer + cargo # Needed by blink-cmp + taplo + vscode-extensions.vadimcn.vscode-lldb - # Rust - rust-analyzer - cargo # Needed by blink-cmp - taplo - vscode-extensions.vadimcn.vscode-lldb + # Vue + prettierd + vue-language-server - # Vue - prettierd - vue-language-server + # Svelte + nodePackages.svelte-language-server - # Svelte - nodePackages.svelte-language-server - - # YAML - yaml-language-server - ]; + # YAML + yaml-language-server + ] + ++ pkgs.lib.optionals config.programs.neovim.ollama.enable [ + # Needed by ollama.nvim + curl + ollamaPackage + ]; }; xdg.configFile."nvim/lua" = { diff --git a/modules/home-manager/programs/neovim/ftplugin/cs.lua b/modules/neovim/ftplugin/cs.lua similarity index 100% rename from modules/home-manager/programs/neovim/ftplugin/cs.lua rename to modules/neovim/ftplugin/cs.lua diff --git a/modules/home-manager/programs/neovim/init.lua b/modules/neovim/init.lua similarity index 100% rename from modules/home-manager/programs/neovim/init.lua rename to modules/neovim/init.lua diff --git a/modules/home-manager/programs/neovim/lsp.lua b/modules/neovim/lsp.lua similarity index 100% rename from modules/home-manager/programs/neovim/lsp.lua rename to modules/neovim/lsp.lua diff --git a/modules/home-manager/programs/neovim/lua/community.lua b/modules/neovim/lua/community.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/community.lua rename to modules/neovim/lua/community.lua diff --git a/modules/home-manager/programs/neovim/lua/lazy_setup.lua b/modules/neovim/lua/lazy_setup.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/lazy_setup.lua rename to modules/neovim/lua/lazy_setup.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/astrocore.lua b/modules/neovim/lua/plugins/astrocore.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/astrocore.lua rename to modules/neovim/lua/plugins/astrocore.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/astroui.lua b/modules/neovim/lua/plugins/astroui.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/astroui.lua rename to modules/neovim/lua/plugins/astroui.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/luasnip.lua b/modules/neovim/lua/plugins/luasnip.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/luasnip.lua rename to modules/neovim/lua/plugins/luasnip.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/mason.lua b/modules/neovim/lua/plugins/mason.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/mason.lua rename to modules/neovim/lua/plugins/mason.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/nix-store.lua b/modules/neovim/lua/plugins/nix-store.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/nix-store.lua rename to modules/neovim/lua/plugins/nix-store.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/none-ls.lua b/modules/neovim/lua/plugins/none-ls.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/none-ls.lua rename to modules/neovim/lua/plugins/none-ls.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/nvim-dap.lua b/modules/neovim/lua/plugins/nvim-dap.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/nvim-dap.lua rename to modules/neovim/lua/plugins/nvim-dap.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/nvim-lint.lua b/modules/neovim/lua/plugins/nvim-lint.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/nvim-lint.lua rename to modules/neovim/lua/plugins/nvim-lint.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/nvim-ufo.lua b/modules/neovim/lua/plugins/nvim-ufo.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/nvim-ufo.lua rename to modules/neovim/lua/plugins/nvim-ufo.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/roslyn-nvim.lua b/modules/neovim/lua/plugins/roslyn-nvim.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/roslyn-nvim.lua rename to modules/neovim/lua/plugins/roslyn-nvim.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/treesitter.lua b/modules/neovim/lua/plugins/treesitter.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/treesitter.lua rename to modules/neovim/lua/plugins/treesitter.lua diff --git a/modules/home-manager/programs/neovim/lua/plugins/user.lua b/modules/neovim/lua/plugins/user.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/plugins/user.lua rename to modules/neovim/lua/plugins/user.lua diff --git a/modules/home-manager/programs/neovim/lua/polish.lua b/modules/neovim/lua/polish.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/polish.lua rename to modules/neovim/lua/polish.lua diff --git a/modules/home-manager/programs/neovim/lua/util.lua b/modules/neovim/lua/util.lua similarity index 100% rename from modules/home-manager/programs/neovim/lua/util.lua rename to modules/neovim/lua/util.lua diff --git a/modules/home-manager/programs/neovim/queries/c_sharp/folds.scm b/modules/neovim/queries/c_sharp/folds.scm similarity index 100% rename from modules/home-manager/programs/neovim/queries/c_sharp/folds.scm rename to modules/neovim/queries/c_sharp/folds.scm diff --git a/modules/nixos/packages.nix b/modules/nixos/packages.nix deleted file mode 100644 index ef52519..0000000 --- a/modules/nixos/packages.nix +++ /dev/null @@ -1,111 +0,0 @@ -{ pkgs, ... }: - -{ - # Enable GPG. - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - }; - - # Enable fish system-wide to integrate with nixpkgs. - programs.fish.enable = true; - - # Enable Steam. - programs.steam = { - enable = true; - - remotePlay.openFirewall = true; - localNetworkGameTransfers.openFirewall = true; - # ^ Enables so we can transfer games to other computers in the network. - - # Add Proton-GE to 'compatibilitytools.d'. - extraCompatPackages = with pkgs; [ proton-ge-bin ]; - }; - - # Enable and configure gamemode. - programs.gamemode = { - enable = true; - enableRenice = true; - settings = { - gpu = { - apply_gpu_optimisations = "accept-responsibility"; - gpu_device = 1; - amd_performance_level = "auto"; - }; - }; - }; - - # Enable KDEConnect - programs.kdeconnect = { - enable = true; - package = pkgs.kdePackages.kdeconnect-kde; - }; - - # Enable Docker. - virtualisation.docker.enable = true; - - # Enable virt-manager - programs.virt-manager.enable = true; - - # Enable virtd and spice USB redirection - virtualisation.spiceUSBRedirection.enable = true; - virtualisation.libvirtd.enable = true; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - ## Tools - # Utilities - bat - duf - fuseiso - lm_sensors - p7zip - tree - unrar - unzip - wget - zip - - # File managing - sshfs - yazi - - # Virtualization - docker-compose - quickemu - - # Desktop - wl-clipboard - xclip - zoxide - (catppuccin-sddm.override # So SDDM finds the theme files. - { - flavor = "frappe"; - font = "IBM Plex Sans"; - fontSize = "11"; - background = "${./theming/sddm/Background.jpg}"; - loginBackground = true; - } - ) - - # Networking - gping - nmap - - # Processes - (btop.override { - # AMD GPU support - rocmSupport = true; - }) - killall - - # Filter - fzf - ripgrep - - ## Libraries - libsForQt5.qt5.qtgraphicaleffects - libsForQt5.qt5.qtquickcontrols2 - ]; -} diff --git a/modules/nixos/services.nix b/modules/nixos/services.nix deleted file mode 100644 index 4b857a8..0000000 --- a/modules/nixos/services.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: - -{ - # Enable polkit, - security.polkit.enable = true; - - # install an agent to interface with it, - environment.systemPackages = with pkgs; [ polkit_gnome ]; - - # And enable GNOME keyring for registering keys. - services.gnome.gnome-keyring.enable = true; - - # Enable flatpak to all users. - services.flatpak.enable = true; - - services.postgresql = { - identMap = lib.mkIf config.services.postgresql.enable '' - # MAP_NAME SYSTEM_USER DB_USER - superuser_map root postgres - superuser_map postgres postgres - superuser_map /^(.*)$ \1 - ''; - - authentication = lib.mkIf config.services.postgresql.enable ( - lib.mkOverride 10 '' - # TYPE DATABASE USER ADDRESS METHOD MAP - local all all peer map=superuser_map - host all all 127.0.0.1/32 md5 - host all all ::1/128 md5 - local replication all peer map=superuser_map - host replication all 127.0.0.1/32 ident map=superuser_map - host replication all ::1/128 ident map=superuser_map - '' - ); - }; -} diff --git a/modules/nixos/sound.nix b/modules/nixos/sound.nix deleted file mode 100644 index 3616d7d..0000000 --- a/modules/nixos/sound.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ ... }: - -{ - # Enable sound with pipewire. - services.pulseaudio.enable = false; - services.pipewire = { - enable = true; - audio.enable = true; - - alsa.enable = true; - alsa.support32Bit = true; - - pulse.enable = true; - }; -} diff --git a/modules/nixos/theming.nix b/modules/nixos/theming.nix deleted file mode 100644 index 96f2b24..0000000 --- a/modules/nixos/theming.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ ... }: - -{ - # Set the default fonts for the system. - fonts.fontconfig = { - defaultFonts = { - serif = [ "IBM Plex Serif" ]; - sansSerif = [ "IBM Plex Sans" ]; - monospace = [ "IBM Plex Mono" ]; - }; - }; -} diff --git a/modules/template/README.md b/modules/template/README.md new file mode 100644 index 0000000..dece098 --- /dev/null +++ b/modules/template/README.md @@ -0,0 +1,18 @@ +# READ THIS BEFORE PROCEEDING + +Below is a checklist of changes you need to do before rebuilding your system. + +## Generate your system configuration and replace the placeholders. + +You can achieve this by running `sudo nixos-generate-config`, then overwrite `hardware-configuration.nix` and +`configuration.nix` with the contents of the files found in `/etc/nixos`. + +## Replace placeholder text + +In `flake.nix` you will find `your-hostname-here`, replace with your machine's current hostname. + +In `home-manager.nix` you have to replace: +- `your-username-here` with your user's username; +- `your-home-directory-here` with the path of your home directory, usually the same as your username; +- `your-hostname-here` with your machine's current hostname; +- `your-flake-location-here` with where you are storing the flake. diff --git a/modules/template/configuration.nix b/modules/template/configuration.nix new file mode 100644 index 0000000..c915eb0 --- /dev/null +++ b/modules/template/configuration.nix @@ -0,0 +1 @@ +{ ... }: { } diff --git a/modules/template/flake.nix b/modules/template/flake.nix new file mode 100644 index 0000000..447a388 --- /dev/null +++ b/modules/template/flake.nix @@ -0,0 +1,48 @@ +{ + description = "NixOS System Flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + # Ideally using nixos-unstable since my configuration + # is based off of this channel. + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + linuxware = { + url = "github:wizardlink/linuxware"; + inputs.nixpkgs.follows = "nixpkgs"; # Pin to your local `nixpkgs` if you use the unstable channel. + }; + }; + + outputs = + { + home-manager, + nixpkgs, + linuxware, + ... + }@inputs: + let + system = "x86_64-linux"; + in + { + your-hostname-here = + let + specialArgs = inputs; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.extraSpecialArgs = inputs; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.wizardlink = import ./home-manager.nix; + } + linuxware.nixosModules.hyprland + ]; + in + nixpkgs.lib.nixosSystem { inherit system specialArgs modules; }; + }; +} diff --git a/modules/template/hardware-configuration.nix b/modules/template/hardware-configuration.nix new file mode 100644 index 0000000..c915eb0 --- /dev/null +++ b/modules/template/hardware-configuration.nix @@ -0,0 +1 @@ +{ ... }: { } diff --git a/modules/template/home-manager.nix b/modules/template/home-manager.nix new file mode 100644 index 0000000..33d8b7c --- /dev/null +++ b/modules/template/home-manager.nix @@ -0,0 +1,98 @@ +{ + config, + pkgs, + linuxware, + ... +}: + +{ + imports = [ + linuxware.homeManagerModules.emacs + linuxware.homeManagerModules.hyprland + linuxware.homeManagerModules.neovim + ]; + + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "your-username-here"; + home.homeDirectory = "/home/your-home-directory-here"; + + # 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 = "24.11"; # Please read the comment before changing. + + # 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}!" + # '') + ]; + + # 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'. 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/wizardlink/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + # EDITOR = "emacs"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + programs.neovim = { + # Enable Neovim, pre-configured by `linuxware`. + enable = true; + + # Configure nixd + nixd = { + hostname = "your-hostname-here"; + location = "your-flake-location-here"; + }; + }; +} diff --git a/packages/README.md b/packages/README.md new file mode 100644 index 0000000..1bfcb3e --- /dev/null +++ b/packages/README.md @@ -0,0 +1,17 @@ +## [zenergy](https://github.com/BoukeHaarsma23/zenergy/) + +This is a kernel driver that adds the ability for user to fetch power draw data from AMD CPUs. I maintain it in +[nixpkgs], so you shouldn't use this package _unless_ it is broken in your current +version of [nixpkgs]. + +## wb32dfu-udev-rules + +This package installs the udev rules necessary to allow flashing QMK/Vial onto keyboards that use WB32-DFU bootloaders. + +It is also meant to be used in tandem with [NixOS] using the +[`services.udev.packages`](https://search.nixos.org/options?query=services.udev.packages) configuration. + + + +[nixpkgs]: https://github.com/NixOS/nixpkgs/ +[nixos]: https://nixos.org diff --git a/specific/desktop/services/udev/wb32dfu.nix b/packages/wb32dfu-udev-rules/default.nix similarity index 100% rename from specific/desktop/services/udev/wb32dfu.nix rename to packages/wb32dfu-udev-rules/default.nix diff --git a/specific/desktop/services/udev/wb32dfu.rules b/packages/wb32dfu-udev-rules/wb32dfu.rules similarity index 100% rename from specific/desktop/services/udev/wb32dfu.rules rename to packages/wb32dfu-udev-rules/wb32dfu.rules diff --git a/specific/kernel/zenergy.nix b/packages/zenergy.nix similarity index 100% rename from specific/kernel/zenergy.nix rename to packages/zenergy.nix diff --git a/shared/README.md b/shared/README.md new file mode 100644 index 0000000..548a28c --- /dev/null +++ b/shared/README.md @@ -0,0 +1,51 @@ +In this directory you will find the configuration for [NixOS] and [Home Manager] that I share across multiple machines. + +## File structure + +### ./nixos + +- `default.nix` + - _Entry point._ +- `common.nix` + - _General configuration and packages._ +- `desktop.nix` + - _Desktop specific configuration._ +- `gaming.nix` + - _Gaming related configuration._ +- `hardware.nix` + - _Hardware specific configuration._ +- `system.nix` + - _Configuration pertaining the system._ +- `virtualization.nix` + - _Virtualization packages and configuration._ + +### ./home-manager + +- `default.nix` + - _Entry point._ +- `common.nix` + - _General and misc. packages alongside uncategorized dotfiles._ +- `gaming.nix` + - _Packages and dotfiles pertaining games/gaming._ +- `theming.nix` + - _Theming of the system and it's packages._ +- `dotfiles/` + - _Program specific user configuration._ +- `scripts/` + - _Contains scripts that I may use day to day._ + +#### Screenshots + +Waybar: + +![image](/assets/screenshots/waybar.png) + +Rofi: + +![image](/assets/screenshots/rofi.png) + + + + +[nixos]: https://nixos.org +[home manager]: https://github.com/nix-community/home-manager diff --git a/modules/home-manager/common.nix b/shared/home-manager/common.nix similarity index 59% rename from modules/home-manager/common.nix rename to shared/home-manager/common.nix index ea50961..1e099bc 100644 --- a/modules/home-manager/common.nix +++ b/shared/home-manager/common.nix @@ -1,21 +1,18 @@ -{ pkgs, ... }: +{ pkgs, clipboard-sync, ... }: { - # Let Home Manager install and manage itself. programs.home-manager.enable = true; - home.sessionVariables = { - NIXOS_OZONE_WL = "1"; - QT_QPA_PLATFORM = "wayland"; - }; - home.file = { - # Configuration for gamemode, for running games with optimizations. - ".config/gamemode.ini".source = ./programs/gamemode.ini; + # My utility scripts + ".local/share/scripts" = { + source = ./scripts; + recursive = true; + }; # Configuration for mako, a notification daemon. - ".config/mako".source = ./programs/mako; + ".config/mako".source = ./dotfiles/mako; # Configure pipewire for microphone noise supression. ".config/pipewire/pipewire.conf.d/99-input-denoising.conf".text = '' @@ -53,17 +50,6 @@ } ] ''; - - # Configure DXVK - ".config/dxvk.conf".text = '' - dxvk.enableGraphicsPipelineLibrary = Auto - ''; - - # My utility scripts - ".local/share/scripts" = { - source = ./scripts; - recursive = true; - }; }; # Configure XDG @@ -77,4 +63,74 @@ "x-scheme-handler/https" = [ "firefox.desktop" ]; "x-scheme-handler/unknown" = [ "firefox.desktop" ]; }; + + home.packages = with pkgs; [ + # # 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}!" + # '') + + ## Tools + # Utilities + fastfetch + firefox + pavucontrol + protonvpn-gui + qbittorrent + qdirstat + speedcrunch + vlc + yt-dlp + zathura + + # Personal utilities + anki + ledger + (vesktop.override { + # FIXME: Need to pin until https://github.com/NixOS/nixpkgs/issues/380429 gets resolved. + electron = electron_33; + }) + + # Editing + libreoffice + + # Creative work + aseprite + blender + krita + lmms + orca-slicer + shotcut + vcv-rack + vhs + + ## Entertainment + jellyfin-media-player + + ## Libraries + libsForQt5.kdegraphics-thumbnailers + libsForQt5.kio-extras + rnnoise-plugin + + ## Development + beekeeper-studio + godot_4 + hoppscotch + lazygit + + ## Desktop environment + clipboard-sync.packages.${pkgs.stdenv.hostPlatform.system}.default + cliphist + grim + libsForQt5.ark + loupe + mako + slurp + swww + + # Mail client + thunderbird + ]; } diff --git a/modules/home-manager/default.nix b/shared/home-manager/default.nix similarity index 68% rename from modules/home-manager/default.nix rename to shared/home-manager/default.nix index 50b9785..e0205e4 100644 --- a/modules/home-manager/default.nix +++ b/shared/home-manager/default.nix @@ -3,7 +3,8 @@ { imports = [ ./common.nix - ./packages.nix + ./dotfiles + ./gaming.nix ./theming.nix ]; } diff --git a/modules/home-manager/programs/alacritty.nix b/shared/home-manager/dotfiles/alacritty.nix similarity index 100% rename from modules/home-manager/programs/alacritty.nix rename to shared/home-manager/dotfiles/alacritty.nix diff --git a/modules/home-manager/programs/default.nix b/shared/home-manager/dotfiles/default.nix similarity index 82% rename from modules/home-manager/programs/default.nix rename to shared/home-manager/dotfiles/default.nix index e18c2d7..e08e113 100644 --- a/modules/home-manager/programs/default.nix +++ b/shared/home-manager/dotfiles/default.nix @@ -4,12 +4,9 @@ imports = [ ./alacritty.nix ./direnv - ./emacs ./fish ./git.nix - ./hyprland ./mangohud.nix - ./neovim ./obs-studio.nix ./rofi ./spotify diff --git a/modules/home-manager/programs/direnv/default.nix b/shared/home-manager/dotfiles/direnv/default.nix similarity index 100% rename from modules/home-manager/programs/direnv/default.nix rename to shared/home-manager/dotfiles/direnv/default.nix diff --git a/modules/home-manager/programs/fish/Catppuccin-Frappe.theme b/shared/home-manager/dotfiles/fish/Catppuccin-Frappe.theme similarity index 100% rename from modules/home-manager/programs/fish/Catppuccin-Frappe.theme rename to shared/home-manager/dotfiles/fish/Catppuccin-Frappe.theme diff --git a/modules/home-manager/programs/fish/default.nix b/shared/home-manager/dotfiles/fish/default.nix similarity index 92% rename from modules/home-manager/programs/fish/default.nix rename to shared/home-manager/dotfiles/fish/default.nix index e09c900..aef3482 100644 --- a/modules/home-manager/programs/fish/default.nix +++ b/shared/home-manager/dotfiles/fish/default.nix @@ -1,6 +1,11 @@ -{ pkgs, ... }: +{ ... }: { + home.file = { + # Cattpuccin theme for fish shell. + ".config/fish/themes/Catppuccin-Frappe.theme".source = ./Catppuccin-Frappe.theme; + }; + programs.fish = { enable = true; diff --git a/modules/home-manager/programs/gamemode.ini b/shared/home-manager/dotfiles/gamemode.ini similarity index 100% rename from modules/home-manager/programs/gamemode.ini rename to shared/home-manager/dotfiles/gamemode.ini diff --git a/modules/home-manager/programs/git.nix b/shared/home-manager/dotfiles/git.nix similarity index 100% rename from modules/home-manager/programs/git.nix rename to shared/home-manager/dotfiles/git.nix diff --git a/modules/home-manager/programs/mako/config b/shared/home-manager/dotfiles/mako/config similarity index 100% rename from modules/home-manager/programs/mako/config rename to shared/home-manager/dotfiles/mako/config diff --git a/modules/home-manager/programs/mangohud.nix b/shared/home-manager/dotfiles/mangohud.nix similarity index 100% rename from modules/home-manager/programs/mangohud.nix rename to shared/home-manager/dotfiles/mangohud.nix diff --git a/modules/home-manager/programs/obs-studio.nix b/shared/home-manager/dotfiles/obs-studio.nix similarity index 100% rename from modules/home-manager/programs/obs-studio.nix rename to shared/home-manager/dotfiles/obs-studio.nix diff --git a/modules/home-manager/theming/qt5ct/Catppuccin-Frappe.conf b/shared/home-manager/dotfiles/qt5ct/Catppuccin-Frappe.conf similarity index 100% rename from modules/home-manager/theming/qt5ct/Catppuccin-Frappe.conf rename to shared/home-manager/dotfiles/qt5ct/Catppuccin-Frappe.conf diff --git a/modules/home-manager/theming/qt5ct/Catppuccin-Latte.conf b/shared/home-manager/dotfiles/qt5ct/Catppuccin-Latte.conf similarity index 100% rename from modules/home-manager/theming/qt5ct/Catppuccin-Latte.conf rename to shared/home-manager/dotfiles/qt5ct/Catppuccin-Latte.conf diff --git a/modules/home-manager/theming/qt5ct/Catppuccin-Macchiato.conf b/shared/home-manager/dotfiles/qt5ct/Catppuccin-Macchiato.conf similarity index 100% rename from modules/home-manager/theming/qt5ct/Catppuccin-Macchiato.conf rename to shared/home-manager/dotfiles/qt5ct/Catppuccin-Macchiato.conf diff --git a/modules/home-manager/theming/qt5ct/Catppuccin-Mocha.conf b/shared/home-manager/dotfiles/qt5ct/Catppuccin-Mocha.conf similarity index 100% rename from modules/home-manager/theming/qt5ct/Catppuccin-Mocha.conf rename to shared/home-manager/dotfiles/qt5ct/Catppuccin-Mocha.conf diff --git a/modules/home-manager/programs/rofi/catppuccin-frappe.rasi b/shared/home-manager/dotfiles/rofi/catppuccin-frappe.rasi similarity index 100% rename from modules/home-manager/programs/rofi/catppuccin-frappe.rasi rename to shared/home-manager/dotfiles/rofi/catppuccin-frappe.rasi diff --git a/modules/home-manager/programs/rofi/default.nix b/shared/home-manager/dotfiles/rofi/default.nix similarity index 100% rename from modules/home-manager/programs/rofi/default.nix rename to shared/home-manager/dotfiles/rofi/default.nix diff --git a/modules/home-manager/programs/spotify/default.nix b/shared/home-manager/dotfiles/spotify/default.nix similarity index 100% rename from modules/home-manager/programs/spotify/default.nix rename to shared/home-manager/dotfiles/spotify/default.nix diff --git a/modules/home-manager/programs/tmux/default.nix b/shared/home-manager/dotfiles/tmux/default.nix similarity index 100% rename from modules/home-manager/programs/tmux/default.nix rename to shared/home-manager/dotfiles/tmux/default.nix diff --git a/modules/home-manager/programs/waybar.nix b/shared/home-manager/dotfiles/waybar.nix similarity index 100% rename from modules/home-manager/programs/waybar.nix rename to shared/home-manager/dotfiles/waybar.nix diff --git a/shared/home-manager/gaming.nix b/shared/home-manager/gaming.nix new file mode 100644 index 0000000..a73195e --- /dev/null +++ b/shared/home-manager/gaming.nix @@ -0,0 +1,28 @@ +{ pkgs, ... }: + +{ + + home.file = { + # Configuration for gamemode, for running games with optimizations. + ".config/gamemode.ini".source = ./dotfiles/gamemode.ini; + + # Configure DXVK + ".config/dxvk.conf".text = '' + dxvk.enableGraphicsPipelineLibrary = Auto + ''; + }; + + home.packages = with pkgs; [ + gamescope + heroic + protontricks + wineWowPackages.unstableFull + winetricks + + # Games + openttd + prismlauncher + shattered-pixel-dungeon + xonotic + ]; +} diff --git a/modules/home-manager/scripts/create_feedback_sink.sh b/shared/home-manager/scripts/create_feedback_sink.sh similarity index 100% rename from modules/home-manager/scripts/create_feedback_sink.sh rename to shared/home-manager/scripts/create_feedback_sink.sh diff --git a/modules/home-manager/scripts/delete_feedback_sink.sh b/shared/home-manager/scripts/delete_feedback_sink.sh similarity index 100% rename from modules/home-manager/scripts/delete_feedback_sink.sh rename to shared/home-manager/scripts/delete_feedback_sink.sh diff --git a/modules/home-manager/scripts/games/launch.sh b/shared/home-manager/scripts/games/launch.sh similarity index 100% rename from modules/home-manager/scripts/games/launch.sh rename to shared/home-manager/scripts/games/launch.sh diff --git a/modules/home-manager/theming.nix b/shared/home-manager/theming.nix similarity index 83% rename from modules/home-manager/theming.nix rename to shared/home-manager/theming.nix index 470a0bd..0ae790d 100644 --- a/modules/home-manager/theming.nix +++ b/shared/home-manager/theming.nix @@ -12,9 +12,6 @@ ]; home.file = { - # Cattpuccin theme for fish shell. - ".config/fish/themes/Catppuccin-Frappe.theme".source = ./theming/Catppuccin-Frappe.theme; - ## Kvantum's theme configuration. ".config/Kvantum/catppuccin-frappe-lavender" = { source = "${ @@ -31,10 +28,10 @@ ''; ## - ## Themeing configuration for qt5 and qt6 - ".config/qt5ct/colors".source = ./theming/qt5ct; + ## Theming configuration for qt5 and qt6 + ".config/qt5ct/colors".source = ./dotfiles/qt5ct; - ".config/qt6ct/colors".source = ./theming/qt5ct; # We use the qt5ct because it's the SAME spec + ".config/qt6ct/colors".source = ./dotfiles/qt5ct; # We use the qt5ct because it's the SAME spec ## ".local/share/SpeedCrunch/color-schemes/catppuccin-frappe.json" = { diff --git a/modules/nixos/common.nix b/shared/nixos/common.nix similarity index 57% rename from modules/nixos/common.nix rename to shared/nixos/common.nix index ea56755..f03844d 100644 --- a/modules/nixos/common.nix +++ b/shared/nixos/common.nix @@ -1,4 +1,4 @@ -{ nixpkgs, ... }: +{ pkgs, nixpkgs, ... }: { # Enable experimental features @@ -7,6 +7,18 @@ "flakes" ]; + # Optimize storage + nix.optimise.automatic = true; + nix.settings.auto-optimise-store = true; + + # Pin the nix registry + nix.registry = { + nixpkgs.flake = nixpkgs; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + # Enable nh, a bundle of CLI utilities for NixOS programs.nh = { enable = true; @@ -19,21 +31,40 @@ flake = "/home/wizardlink/.system"; }; - # Optimize storage - nix.optimise.automatic = true; - nix.settings.auto-optimise-store = true; + # Enable flatpak to all users. + services.flatpak.enable = true; - # Enable Hyprland's cachix - nix.settings.substituters = [ "https://hyprland.cachix.org" ]; - nix.settings.trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + environment.systemPackages = with pkgs; [ + ## Tools + # Utilities + bat + duf + fuseiso + lm_sensors + p7zip + tree + unrar + unzip + wget + zip + + # File managing + sshfs + yazi + + # Networking + gping + nmap + + # Processes + (btop.override { + # AMD GPU support + rocmSupport = true; + }) + killall + + # Filter + fzf + ripgrep ]; - - # Pin the nix registry - nix.registry = { - nixpkgs.flake = nixpkgs; - }; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; } diff --git a/modules/nixos/default.nix b/shared/nixos/default.nix similarity index 59% rename from modules/nixos/default.nix rename to shared/nixos/default.nix index 796ca94..7662091 100644 --- a/modules/nixos/default.nix +++ b/shared/nixos/default.nix @@ -4,11 +4,9 @@ imports = [ ./common.nix ./desktop.nix + ./gaming.nix ./hardware.nix - ./packages.nix - ./services.nix - ./sound.nix ./system.nix - ./theming.nix + ./virtualization.nix ]; } diff --git a/modules/nixos/desktop.nix b/shared/nixos/desktop.nix similarity index 65% rename from modules/nixos/desktop.nix rename to shared/nixos/desktop.nix index cf582a8..1a64096 100644 --- a/modules/nixos/desktop.nix +++ b/shared/nixos/desktop.nix @@ -1,18 +1,9 @@ { pkgs, - hyprland, ... }: -let - hyprland-pkgs = hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system}; -in { - environment.sessionVariables = { - # Set env for Fcitx5 - QMODIFIERS = "@im=fcitx5"; - }; - # Enable SDDM. services.displayManager.sddm = { enable = true; @@ -21,14 +12,6 @@ in package = pkgs.kdePackages.sddm; }; - # Enable Hyprland - programs.hyprland = { - enable = true; - - package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; - portalPackage = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; - }; - # Enable XDG Desktop Portals. xdg.portal = { enable = true; @@ -51,14 +34,20 @@ in enable = true; enable32Bit = true; - package = hyprland-pkgs.mesa.drivers; - package32 = hyprland-pkgs.pkgsi686Linux.mesa.drivers; - extraPackages = with pkgs; [ rocmPackages.clr.icd # OpenGL hwa ]; }; + # Set the default fonts for the system. + fonts.fontconfig = { + defaultFonts = { + serif = [ "IBM Plex Serif" ]; + sansSerif = [ "IBM Plex Sans" ]; + monospace = [ "IBM Plex Mono" ]; + }; + }; + # Enable Thunar and it's dependencies programs.thunar = { enable = true; @@ -68,6 +57,12 @@ in services.gvfs.enable = true; # For mounting drives, trash, etc. services.tumbler.enable = true; # Thumbnail support + # Enable KDEConnect + programs.kdeconnect = { + enable = true; + package = pkgs.kdePackages.kdeconnect-kde; + }; + # Enable the Fcitx5 IME i18n.inputMethod = { enable = true; @@ -87,4 +82,28 @@ in waylandFrontend = true; }; }; + + environment.sessionVariables = { + # Set env for Fcitx5 + QMODIFIERS = "@im=fcitx5"; + }; + + environment.systemPackages = with pkgs; [ + wl-clipboard + xclip + zoxide + (catppuccin-sddm.override # So SDDM finds the theme files. + { + flavor = "frappe"; + font = "IBM Plex Sans"; + fontSize = "11"; + background = "${../../assets/sddm/Background.jpg}"; + loginBackground = true; + } + ) + + ## Libraries + libsForQt5.qt5.qtgraphicaleffects + libsForQt5.qt5.qtquickcontrols2 + ]; } diff --git a/shared/nixos/gaming.nix b/shared/nixos/gaming.nix new file mode 100644 index 0000000..5ccdf3e --- /dev/null +++ b/shared/nixos/gaming.nix @@ -0,0 +1,28 @@ +{ pkgs, ... }: + +{ + # Enable Steam. + programs.steam = { + enable = true; + + remotePlay.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + # ^ Enables so we can transfer games to other computers in the network. + + # Add Proton-GE to 'compatibilitytools.d'. + extraCompatPackages = with pkgs; [ proton-ge-bin ]; + }; + + # Enable and configure gamemode. + programs.gamemode = { + enable = true; + enableRenice = true; + settings = { + gpu = { + apply_gpu_optimisations = "accept-responsibility"; + gpu_device = 1; + amd_performance_level = "auto"; + }; + }; + }; +} diff --git a/modules/nixos/hardware.nix b/shared/nixos/hardware.nix similarity index 75% rename from modules/nixos/hardware.nix rename to shared/nixos/hardware.nix index 9df7970..184f32f 100644 --- a/modules/nixos/hardware.nix +++ b/shared/nixos/hardware.nix @@ -1,6 +1,11 @@ { ... }: { + # Add AMD drivers + boot.initrd.kernelModules = [ + "amdgpu" + ]; + # Enable Bluetooth hardware.bluetooth = { enable = true; diff --git a/modules/nixos/system.nix b/shared/nixos/system.nix similarity index 55% rename from modules/nixos/system.nix rename to shared/nixos/system.nix index d70060d..6102d20 100644 --- a/modules/nixos/system.nix +++ b/shared/nixos/system.nix @@ -4,16 +4,17 @@ # Kernel boot.kernelPackages = pkgs.linuxPackages_zen; - # Add AMD drivers. boot.initrd.kernelModules = [ - "amdgpu" "v4l2loopback" + "zenergy" ]; boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback + config.boot.kernelPackages.zenergy # Allows fetching power draw information on AMD CPUs ]; + # Configure v4l2loopback boot.extraModprobeConfig = '' options v4l2loopback devices=1 video_nr=1 card_label="Virtual camera" exclusive_caps=1 ''; @@ -34,6 +35,21 @@ # Enable networking networking.networkmanager.enable = true; + # Enable sound with pipewire. + services.pulseaudio.enable = false; + services.pipewire = { + enable = true; + audio.enable = true; + + alsa.enable = true; + alsa.support32Bit = true; + + pulse.enable = true; + }; + + # Enable fish system-wide to integrate with nixpkgs. + programs.fish.enable = true; + # Set fish as the default shell for all users. users.defaultUserShell = pkgs.fish; @@ -50,4 +66,19 @@ StreamLocalBindUnlink = "yes"; }; }; + + # Enable GPG. + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + # Enable polkit, + security.polkit.enable = true; + + # install an agent to interface with it, + environment.systemPackages = with pkgs; [ polkit_gnome ]; + + # And enable GNOME keyring for registering keys. + services.gnome.gnome-keyring.enable = true; } diff --git a/shared/nixos/virtualization.nix b/shared/nixos/virtualization.nix new file mode 100644 index 0000000..6cec7a6 --- /dev/null +++ b/shared/nixos/virtualization.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: + +{ + # Enable Docker. + virtualisation.docker.enable = true; + + # Enable virt-manager + programs.virt-manager.enable = true; + + # Enable virtd and spice USB redirection + virtualisation.spiceUSBRedirection.enable = true; + virtualisation.libvirtd.enable = true; + + environment.systemPackages = with pkgs; [ + docker-compose + quickemu + ]; +} diff --git a/specific/desktop/hardware.nix b/specific/desktop/hardware.nix deleted file mode 100644 index 006ce2c..0000000 --- a/specific/desktop/hardware.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ pkgs, config, ... }: - -{ - # Enable Zenergy - boot.initrd.kernelModules = [ - "zenergy" - ]; - boot.extraModulePackages = [ - config.boot.kernelPackages.zenergy - ]; - - # Enable openrazer for managing Razer products' configuration - hardware.openrazer = { - enable = true; - users = [ "wizardlink" ]; - }; - - services.udev = { - # Vial udev rule for Monsgeek M1 - extraRules = '' - # Monsgeek M1 - KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="fffe", ATTRS{idProduct}=="0005", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl" - ''; - - # WB32 DFU rules - needed for flashing - packages = [ (pkgs.callPackage ./services/udev/wb32dfu.nix { }) ]; - }; - - # enable a better driver for wireless xbox controllers. - hardware.xpadneo.enable = true; -} diff --git a/specific/desktop/services.nix b/specific/desktop/services.nix deleted file mode 100644 index 9b7fc09..0000000 --- a/specific/desktop/services.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ ... }: - -{ - imports = [ - ./services/archi.nix - ./services/caddy.nix - ./services/forgejo.nix - ./services/jellyfin.nix - ./services/nix-serve.nix - ./services/postgresql.nix - ]; -} diff --git a/specific/desktop/services/authentication.nix b/specific/desktop/services/authentication.nix deleted file mode 100644 index 64a2b2c..0000000 --- a/specific/desktop/services/authentication.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, ... }: - -{ - # Enable polkit, - security.polkit.enable = true; - - # Install a keyring service and manager. - environment.systemPackages = with pkgs; [ - libsForQt5.kwallet - libsForQt5.kwalletmanager - ]; -} diff --git a/specific/laptop/hardware.nix b/specific/laptop/hardware.nix deleted file mode 100644 index 1853979..0000000 --- a/specific/laptop/hardware.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, ... }: - -{ - # Enable Zenergy - boot.initrd.kernelModules = [ - "zenergy" - ]; - boot.extraModulePackages = [ - config.boot.kernelPackages.zenergy - ]; - - # enable a better driver for wireless xbox controllers. - hardware.xpadneo.enable = true; -}