diff --git a/assets/bocchi/bocchi.txt b/assets/bocchi/bocchi.txt new file mode 100644 index 0000000..924ae4d --- /dev/null +++ b/assets/bocchi/bocchi.txt @@ -0,0 +1,16 @@ +     β–„β–„β–€β–€β–€β–€β–€β–€β–€β–€β–€β–„β–„           +   β–„β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–„     + β–„β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–„  +β–„β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€ +β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€ β–€β–€ +  β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€     +  β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€     +  β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–„    +   β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€    +    β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€    +    β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€    +    β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€     +     β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€      +       β–€β–€β–€β–€β–€β–€β–€β–€β–€             +      β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€            + diff --git a/assets/pictures/bocchi_lockscreen.png b/assets/pictures/bocchi_lockscreen.png new file mode 100644 index 0000000..f6130ee Binary files /dev/null and b/assets/pictures/bocchi_lockscreen.png differ diff --git a/assets/pictures/bocchi_wallpaper.png b/assets/pictures/bocchi_wallpaper.png new file mode 100644 index 0000000..7070062 Binary files /dev/null and b/assets/pictures/bocchi_wallpaper.png differ diff --git a/assets/pictures/roy_bocchi.png b/assets/pictures/roy_bocchi.png new file mode 100644 index 0000000..11a2118 Binary files /dev/null and b/assets/pictures/roy_bocchi.png differ diff --git a/configuration/main/500G-disk.nix b/configuration/main/500G-disk.nix new file mode 100644 index 0000000..2d13ee0 --- /dev/null +++ b/configuration/main/500G-disk.nix @@ -0,0 +1,7 @@ +{ + fileSystems."/mnt/500G-disk" = { + device = "/dev/disk/by-uuid/1a899f03-4c6a-460a-9635-c4b208b29fba"; + fsType = "ext4"; + options = ["nofail" "user" "rw" "exec"]; + }; +} diff --git a/configuration/main/configuration.nix b/configuration/main/configuration.nix new file mode 100644 index 0000000..e80375d --- /dev/null +++ b/configuration/main/configuration.nix @@ -0,0 +1,49 @@ +{ + pkgs, + inputs, + ... +}: { + imports = [ + ./hardware-configuration.nix + ./verbatim.nix + ./500G-disk.nix + + ../modules/system/graphics.nix + ../modules/system/boot.nix + ../modules/system/networking.nix + ../modules/system/xdg-settings.nix + ../modules/system/window-manager.nix + ../modules/system/sddm.nix + ../modules/system/main-user.nix + ../modules/system/programs.nix + ../modules/system/ssh.nix + ../modules/system/sound.nix + ../modules/system/printing.nix + ../modules/system/input-handle.nix + ../modules/system/keyboard.nix + ../modules/system/locale.nix + + ../modules/dots/quick_shell/module.nix + ]; + + programs.niri.enable = true; + programs.xwayland = { + enable = true; + package = pkgs.xwayland-satellite; + }; + + nix.settings.experimental-features = ["nix-command" "flakes"]; + + nixpkgs.config = { + allowUnfree = true; + nvidia.acceptLicense = true; + }; + + services.xserver.enable = true; + + environment.shells = [pkgs.nushell]; + + home-manager.extraSpecialArgs = {inherit inputs;}; + + system.stateVersion = "25.11"; +} diff --git a/configuration/main/hardware-configuration.nix b/configuration/main/hardware-configuration.nix new file mode 100644 index 0000000..dc8dc59 --- /dev/null +++ b/configuration/main/hardware-configuration.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 = [ "ata_generic" "ehci_pci" "ahci" "nvme" "usbhid" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/339dddc4-c4f8-47ea-a7a9-471c77f7c89e"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/1ff36da1-f1eb-4ae0-911f-d638ad5cf5ec"; + fsType = "ext4"; + }; + + fileSystems."/mnt/500G-disk" = + { device = "/dev/disk/by-uuid/1a899f03-4c6a-460a-9635-c4b208b29fba"; + fsType = "ext4"; + }; + + fileSystems."/mnt/verbatim" = + { device = "/dev/disk/by-uuid/2aa5f849-1df0-4f3a-b7db-ef64d06b16e4"; + fsType = "ext4"; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/configuration/main/verbatim.nix b/configuration/main/verbatim.nix new file mode 100644 index 0000000..076eeb8 --- /dev/null +++ b/configuration/main/verbatim.nix @@ -0,0 +1,7 @@ +{ + fileSystems."/mnt/verbatim" = { + device = "/dev/disk/by-uuid/2aa5f849-1df0-4f3a-b7db-ef64d06b16e4"; + fsType = "ext4"; + options = ["nofail" "user" "rw" "exec"]; + }; +} diff --git a/configuration/modules/dots/quick_shell/.envrc b/configuration/modules/dots/quick_shell/.envrc new file mode 100644 index 0000000..e69de29 diff --git a/configuration/modules/dots/quick_shell/config/.qmlls.ini b/configuration/modules/dots/quick_shell/config/.qmlls.ini new file mode 120000 index 0000000..4ddb8a7 --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/.qmlls.ini @@ -0,0 +1 @@ +/run/user/1000/quickshell/vfs/740f0dbe5bf608b9ce0b8dffafd96492/.qmlls.ini \ No newline at end of file diff --git a/configuration/modules/dots/quick_shell/config/CalendarPopup.qml b/configuration/modules/dots/quick_shell/config/CalendarPopup.qml new file mode 100644 index 0000000..ef0fe78 --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/CalendarPopup.qml @@ -0,0 +1,39 @@ +pragma ComponentBehavior: Bound + +import Quickshell +import QtQuick + +PanelWindow { + id: calendarPopup + + required property bool expanderOpen + required property color bgColor + required property color recColor + required property int recRadius + required property int barWidth + + anchors.left: true + anchors.bottom: true + implicitWidth: (expanderOpen || popupAnim.running) ? 160 : 0 + implicitHeight: (expanderOpen || popupAnim.running) ? 1400 : 0 + color: "transparent" + + Rectangle { + id: popupRectangle + + y: calendarPopup.height - height + x: calendarPopup.expanderOpen ? 0 : -(width + calendarPopup.barWidth) + width: 160 + height: 140 + color: calendarPopup.bgColor + + Behavior on x { + NumberAnimation { + id: popupAnim + + duration: 400 + easing.type: Easing.OutCubic + } + } + } +} diff --git a/configuration/modules/dots/quick_shell/config/PowerPopup.qml b/configuration/modules/dots/quick_shell/config/PowerPopup.qml new file mode 100644 index 0000000..8998820 --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/PowerPopup.qml @@ -0,0 +1,86 @@ +pragma ComponentBehavior: Bound + +import Quickshell +import QtQuick +import QtQuick.Controls + +PanelWindow { + id: powerPopup + + required property bool expanderOpen + required property color bgColor + required property color recColor + required property int recRadius + required property int barWidth + + anchors.left: true + anchors.bottom: true + implicitWidth: (expanderOpen || popupAnim.running) ? 140 : 0 + implicitHeight: (expanderOpen || popupAnim.running) ? 100 : 0 + color: "transparent" + + Rectangle { + id: popupRectangle + + y: parent.height - height + x: powerPopup.expanderOpen ? 0 : -(width + powerPopup.barWidth) + width: 140 + height: 100 + color: powerPopup.bgColor + + Behavior on x { + NumberAnimation { + id: popupAnim + + duration: 400 + easing.type: Easing.OutCubic + } + } + + Row { + anchors.centerIn: popupRectangle + spacing: 10 + + Rectangle { + color: powerPopup.recColor + width: 50 + height: 50 + radius: powerPopup.recRadius * 2 + + Button { + anchors.fill: parent + opacity: 0 + + onClicked: Quickshell.execDetached(["poweroff"]) + } + + Image { + anchors.centerIn: parent + source: "file://" + Quickshell.shellDir + "/assets/power.svg" + sourceSize.width: 28 + sourceSize.height: 28 + } + } + Rectangle { + color: powerPopup.recColor + width: 50 + height: 50 + radius: powerPopup.recRadius * 2 + + Button { + anchors.fill: parent + opacity: 0 + + onClicked: Quickshell.execDetached(["reboot"]) + } + + Image { + anchors.centerIn: parent + source: "file://" + Quickshell.shellDir + "/assets/reboot.svg" + sourceSize.width: 28 + sourceSize.height: 28 + } + } + } + } +} diff --git a/configuration/modules/dots/quick_shell/config/SideBar.qml b/configuration/modules/dots/quick_shell/config/SideBar.qml new file mode 100644 index 0000000..adc24f5 --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/SideBar.qml @@ -0,0 +1,143 @@ +pragma ComponentBehavior: Bound + +import Quickshell +import QtQuick +import QtQuick.Controls + +PanelWindow { + id: sideBar + + required property var clock + required property color bgColor + required property color recColor + required property color fontColor + required property int fontSize + required property int barWidth + required property int recRadius + required property int recLength + required property int myMargin + required property int edgeMargin + + required property bool powerExpanderOpen + required property bool calendarExpanderOpen + + anchors.top: true + anchors.left: true + anchors.bottom: true + + implicitWidth: sideBar.barWidth + color: sideBar.bgColor + + Rectangle { + id: logo + anchors { + horizontalCenter: parent.horizontalCenter + top: parent.top + topMargin: sideBar.edgeMargin + } + implicitHeight: sideBar.recLength + implicitWidth: sideBar.recLength + radius: sideBar.recRadius + color: sideBar.recColor + + Image { + anchors.centerIn: parent + source: "file://" + Quickshell.shellDir + "/assets/logo.svg" + sourceSize.width: 30 + sourceSize.height: 30 + } + } + + Rectangle { + id: workspaces + anchors { + horizontalCenter: parent.horizontalCenter + top: logo.bottom + topMargin: sideBar.myMargin + } + implicitHeight: 200 + implicitWidth: sideBar.recLength + radius: sideBar.recRadius + color: sideBar.recColor + + Text { + anchors.centerIn: parent + color: sideBar.fontColor + font.pixelSize: sideBar.fontSize + text: "ws" + } + } + + Rectangle { + id: notifications + anchors { + horizontalCenter: parent.horizontalCenter + bottom: time.top + bottomMargin: sideBar.myMargin + } + implicitHeight: sideBar.recLength + implicitWidth: sideBar.recLength + radius: sideBar.recRadius + color: sideBar.recColor + + Text { + anchors.centerIn: parent + color: sideBar.fontColor + font.pixelSize: sideBar.fontSize + text: "notif" + } + } + + Rectangle { + id: time + anchors { + horizontalCenter: parent.horizontalCenter + bottom: power.top + bottomMargin: sideBar.myMargin + } + implicitHeight: sideBar.recLength + implicitWidth: sideBar.recLength + radius: sideBar.recRadius + color: sideBar.recColor + property real hello: time.y + + Button { + anchors.fill: parent + opacity: 0 + onClicked: sideBar.calendarExpanderOpen = !sideBar.calendarExpanderOpen + } + + Text { + anchors.centerIn: parent + color: sideBar.fontColor + font.pixelSize: sideBar.fontSize + text: Qt.formatDateTime(sideBar.clock.date, "hh\nmm") + } + } + + Rectangle { + id: power + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + bottomMargin: sideBar.edgeMargin + } + implicitHeight: sideBar.recLength + implicitWidth: sideBar.recLength + radius: sideBar.recRadius + color: sideBar.recColor + + Button { + anchors.fill: parent + opacity: 0 + onClicked: sideBar.powerExpanderOpen = !sideBar.powerExpanderOpen + } + + Image { + anchors.centerIn: parent + source: "file://" + Quickshell.shellDir + "/assets/power.svg" + sourceSize.width: 28 + sourceSize.height: 28 + } + } +} diff --git a/configuration/modules/dots/quick_shell/config/assets/logo.svg b/configuration/modules/dots/quick_shell/config/assets/logo.svg new file mode 100644 index 0000000..1cceefe --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/configuration/modules/dots/quick_shell/config/assets/power.svg b/configuration/modules/dots/quick_shell/config/assets/power.svg new file mode 100644 index 0000000..aced5be --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/assets/power.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/configuration/modules/dots/quick_shell/config/assets/reboot.svg b/configuration/modules/dots/quick_shell/config/assets/reboot.svg new file mode 100644 index 0000000..5e3110e --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/assets/reboot.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/configuration/modules/dots/quick_shell/config/shell.qml b/configuration/modules/dots/quick_shell/config/shell.qml new file mode 100644 index 0000000..4f51db1 --- /dev/null +++ b/configuration/modules/dots/quick_shell/config/shell.qml @@ -0,0 +1,73 @@ +pragma ComponentBehavior: Bound + +import Quickshell +import QtQuick + +ShellRoot { + id: root + + property color bgColor: "#6a6365" + property color recColor: "#595254" + property color fontColor: "#FFFFFF" + property int fontSize: 14 + property int barWidth: 50 + property int recRadius: 8 + property int recLength: 35 + property int myMargin: 10 + property int edgeMargin: 15 + + SystemClock { + id: clock + precision: SystemClock.Minutes + } + + Variants { + model: Quickshell.screens + + delegate: Scope { + id: delegate + required property var modelData + + property bool powerExpanderOpen: false + property bool calendarExpanderOpen: false + + SideBar { + clock: clock + screen: delegate.modelData + bgColor: root.bgColor + recColor: root.recColor + fontColor: root.fontColor + fontSize: root.fontSize + barWidth: root.barWidth + recRadius: root.recRadius + recLength: root.recLength + myMargin: root.myMargin + edgeMargin: root.edgeMargin + + powerExpanderOpen: delegate.powerExpanderOpen + onPowerExpanderOpenChanged: delegate.powerExpanderOpen = powerExpanderOpen + + calendarExpanderOpen: delegate.calendarExpanderOpen + onCalendarExpanderOpenChanged: delegate.calendarExpanderOpen = calendarExpanderOpen + } + + PowerPopup { + screen: delegate.modelData + expanderOpen: delegate.powerExpanderOpen + bgColor: root.bgColor + recColor: root.recColor + recRadius: root.recRadius + barWidth: root.barWidth + } + + CalendarPopup { + screen: delegate.modelData + expanderOpen: delegate.calendarExpanderOpen + bgColor: root.bgColor + recColor: root.recColor + recRadius: root.recRadius + barWidth: root.barWidth + } + } + } +} diff --git a/configuration/modules/dots/quick_shell/module.nix b/configuration/modules/dots/quick_shell/module.nix new file mode 100644 index 0000000..a2d1b66 --- /dev/null +++ b/configuration/modules/dots/quick_shell/module.nix @@ -0,0 +1,20 @@ +{pkgs, ...}: let + qs_config = pkgs.callPackage ./package.nix {}; +in { + environment.systemPackages = [pkgs.quickshell]; + + systemd.user.services.quickshell = { + restartIfChanged = true; + + description = "quickshell desktop shell"; + wantedBy = ["graphical-session.target"]; + partOf = ["graphical-session.target"]; + after = ["graphical-session.target"]; + + serviceConfig = { + ExecStart = "${pkgs.quickshell}/bin/qs -c ${qs_config}"; + Restart = "on-failure"; + RestartSec = 3; + }; + }; +} diff --git a/configuration/modules/dots/quick_shell/package.nix b/configuration/modules/dots/quick_shell/package.nix new file mode 100644 index 0000000..9a59032 --- /dev/null +++ b/configuration/modules/dots/quick_shell/package.nix @@ -0,0 +1,9 @@ +{stdenv}: +stdenv.mkDerivation { + pname = "quickshell-config"; + version = "unstable"; + src = ./config; + installPhase = '' + cp -r . $out + ''; +} diff --git a/configuration/modules/dots/quick_shell/shell.nix b/configuration/modules/dots/quick_shell/shell.nix new file mode 100644 index 0000000..6879520 --- /dev/null +++ b/configuration/modules/dots/quick_shell/shell.nix @@ -0,0 +1,10 @@ +{pkgs ? import {}}: +pkgs.mkShell { + buildInputs = [ + pkgs.qt6.qtbase + pkgs.qt6.qtdeclarative + pkgs.qt6.qtwayland + pkgs.qtcreator + pkgs.quickshell + ]; +} diff --git a/configuration/modules/dots/wayland_panel b/configuration/modules/dots/wayland_panel new file mode 160000 index 0000000..4895333 --- /dev/null +++ b/configuration/modules/dots/wayland_panel @@ -0,0 +1 @@ +Subproject commit 4895333ff1e6b2b9442a58a3c69dad96d7f3b8f3 diff --git a/configuration/modules/system/boot.nix b/configuration/modules/system/boot.nix new file mode 100644 index 0000000..1c36211 --- /dev/null +++ b/configuration/modules/system/boot.nix @@ -0,0 +1,11 @@ +{pkgs, ...}: { + boot = { + kernelPackages = pkgs.linuxPackages_6_12; + kernelParams = ["nvidia-drm.modeset=1"]; + + loader.grub = { + enable = true; + device = "/dev/disk/by-id/ata-KINGSTON_SKC300S37A60G_50026B7239039148"; + }; + }; +} diff --git a/modules/hosts/desktop/hardware.nix b/configuration/modules/system/graphics.nix similarity index 55% rename from modules/hosts/desktop/hardware.nix rename to configuration/modules/system/graphics.nix index 5c5726d..4ad4b3a 100644 --- a/modules/hosts/desktop/hardware.nix +++ b/configuration/modules/system/graphics.nix @@ -1,18 +1,19 @@ {config, ...}: { - flake.modules.nixos.desktop = { - nixpkgs.hostPlatform = "x86_64-linux"; + services.xserver.videoDrivers = [ + "nvidia" + ]; - hardware = { - graphics = { - enable = true; - enable32Bit = true; - }; + hardware = { + graphics = { + enable = true; + enable32Bit = true; }; nvidia = { modesetting.enable = true; powerManagement.enable = true; open = false; + nvidiaSettings = true; package = config.boot.kernelPackages.nvidiaPackages.production; }; }; diff --git a/configuration/modules/system/input-handle.nix b/configuration/modules/system/input-handle.nix new file mode 100644 index 0000000..2578a46 --- /dev/null +++ b/configuration/modules/system/input-handle.nix @@ -0,0 +1,3 @@ +{ + services.libinput.enable = true; +} diff --git a/configuration/modules/system/keyboard.nix b/configuration/modules/system/keyboard.nix new file mode 100644 index 0000000..96a81b1 --- /dev/null +++ b/configuration/modules/system/keyboard.nix @@ -0,0 +1,6 @@ +{ + services.xserver.xkb = { + layout = "cz"; + options = "caps:escape"; + }; +} diff --git a/configuration/modules/system/locale.nix b/configuration/modules/system/locale.nix new file mode 100644 index 0000000..c1e9d41 --- /dev/null +++ b/configuration/modules/system/locale.nix @@ -0,0 +1,19 @@ +{ + console.keyMap = "cz-lat2"; + time.timeZone = "Europe/Prague"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ADDRESS = "cs_CZ.UTF-8"; + LC_IDENTIFICATION = "cs_CZ.UTF-8"; + LC_MEASUREMENT = "cs_CZ.UTF-8"; + LC_MONETARY = "cs_CZ.UTF-8"; + LC_NAME = "cs_CZ.UTF-8"; + LC_NUMERIC = "cs_CZ.UTF-8"; + LC_PAPER = "cs_CZ.UTF-8"; + LC_TELEPHONE = "cs_CZ.UTF-8"; + LC_TIME = "cs_CZ.UTF-8"; + }; + }; +} diff --git a/configuration/modules/system/main-user.nix b/configuration/modules/system/main-user.nix new file mode 100644 index 0000000..b5c6253 --- /dev/null +++ b/configuration/modules/system/main-user.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: { + users.users.benag = { + isNormalUser = true; + extraGroups = ["wheel"]; + + shell = pkgs.nushell; + }; +} diff --git a/configuration/modules/system/networking.nix b/configuration/modules/system/networking.nix new file mode 100644 index 0000000..6611ed0 --- /dev/null +++ b/configuration/modules/system/networking.nix @@ -0,0 +1,6 @@ +{ + networking = { + hostName = "nixos"; + networkmanager.enable = true; + }; +} diff --git a/configuration/modules/system/printing.nix b/configuration/modules/system/printing.nix new file mode 100644 index 0000000..72086cf --- /dev/null +++ b/configuration/modules/system/printing.nix @@ -0,0 +1,9 @@ +{ + services.printing.enable = true; + + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; +} diff --git a/configuration/modules/system/programs.nix b/configuration/modules/system/programs.nix new file mode 100644 index 0000000..d55c2c7 --- /dev/null +++ b/configuration/modules/system/programs.nix @@ -0,0 +1,18 @@ +{pkgs, ...}: { + programs = { + steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + extraPackages = with pkgs; [ + freetype + fontconfig + ]; + }; + + gamemode.enable = true; + bash.blesh.enable = true; + nix-ld.enable = true; + }; +} diff --git a/configuration/modules/system/sddm.nix b/configuration/modules/system/sddm.nix new file mode 100644 index 0000000..9b2a84c --- /dev/null +++ b/configuration/modules/system/sddm.nix @@ -0,0 +1,7 @@ +{ + services.displayManager.sddm = { + enable = true; + autoNumlock = true; + wayland.enable = false; + }; +} diff --git a/configuration/modules/system/sound.nix b/configuration/modules/system/sound.nix new file mode 100644 index 0000000..945248d --- /dev/null +++ b/configuration/modules/system/sound.nix @@ -0,0 +1,13 @@ +{ + services = { + pipewire = { + enable = true; + pulse.enable = true; + + alsa = { + enable = true; + support32Bit = true; + }; + }; + }; +} diff --git a/configuration/modules/system/ssh.nix b/configuration/modules/system/ssh.nix new file mode 100644 index 0000000..8f0456f --- /dev/null +++ b/configuration/modules/system/ssh.nix @@ -0,0 +1,3 @@ +{ + services.openssh.enable = true; +} diff --git a/configuration/modules/system/window-manager.nix b/configuration/modules/system/window-manager.nix new file mode 100644 index 0000000..49570d8 --- /dev/null +++ b/configuration/modules/system/window-manager.nix @@ -0,0 +1,5 @@ +{ + services.xserver.windowManager = { + bspwm.enable = true; + }; +} diff --git a/configuration/modules/system/xdg-settings.nix b/configuration/modules/system/xdg-settings.nix new file mode 100644 index 0000000..a70fb91 --- /dev/null +++ b/configuration/modules/system/xdg-settings.nix @@ -0,0 +1,14 @@ +{pkgs, ...}: { + xdg = { + portal = { + enable = true; + extraPortals = [pkgs.xdg-desktop-portal-gtk]; + configPackages = with pkgs; [ + xdg-desktop-portal-gtk + ]; + }; + + mime.enable = true; + menus.enable = true; + }; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..8d36a7e --- /dev/null +++ b/flake.lock @@ -0,0 +1,401 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1751685974, + "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", + "ref": "refs/heads/main", + "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", + "revCount": 92, + "type": "git", + "url": "https://git.lix.systems/lix-project/flake-compat.git" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/lix-project/flake-compat.git" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nvf", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "floating-calc": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1772147792, + "narHash": "sha256-dxrp+Srkq9mQ+qg53oFI1RKieIi9epEdXyJkv44bZP4=", + "ref": "refs/heads/main", + "rev": "2abbacf66e99db523d624037f3e449aa40e8f366", + "revCount": 12, + "type": "git", + "url": "https://git.stribrny.org/max_ag/floating-calculator" + }, + "original": { + "type": "git", + "url": "https://git.stribrny.org/max_ag/floating-calculator" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773810247, + "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773422513, + "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "mnw": { + "locked": { + "lastModified": 1767030222, + "narHash": "sha256-kSvWF3Xt2HW9hmV5V7i8PqeWJIBUKmuKoHhOgj3Znzs=", + "owner": "Gerg-L", + "repo": "mnw", + "rev": "75bb637454b0fbbb5ed652375a4bf7ffd28bcf6f", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "mnw", + "type": "github" + } + }, + "ndg": { + "inputs": { + "nixpkgs": [ + "nvf", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768214250, + "narHash": "sha256-hnBZDQWUxJV3KbtvyGW5BKLO/fAwydrxm5WHCWMQTbw=", + "owner": "feel-co", + "repo": "ndg", + "rev": "a6bd3c1ce2668d096e4fdaaa03ad7f03ba1fbca8", + "type": "github" + }, + "original": { + "owner": "feel-co", + "ref": "refs/tags/v2.6.0", + "repo": "ndg", + "type": "github" + } + }, + "niri-flake": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1773809319, + "narHash": "sha256-ZuMZEuxqWneGaK+HAXz50JyCmtFo0neo6mp6F2NWj24=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "c4ee62058cd37d7b842c3b081917f792efee9082", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.08", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1773130184, + "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1773734432, + "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1773705440, + "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nvf": { + "inputs": { + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "mnw": "mnw", + "ndg": "ndg", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1768464392, + "narHash": "sha256-H3DRARqclUFdUaWgu1xQEb86/wrh41ZG0fIQJVjcZdE=", + "owner": "notashelf", + "repo": "nvf", + "rev": "007f14a2c8d67568f4655654b401871920d73011", + "type": "github" + }, + "original": { + "owner": "notashelf", + "repo": "nvf", + "rev": "007f14a2c8d67568f4655654b401871920d73011", + "type": "github" + } + }, + "root": { + "inputs": { + "floating-calc": "floating-calc", + "home-manager": "home-manager", + "niri-flake": "niri-flake", + "nixpkgs": "nixpkgs", + "nvf": "nvf", + "wayland-bar": "wayland-bar", + "zen-browser": "zen-browser" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "floating-calc", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1771729765, + "narHash": "sha256-HNsDSR5bhLSrIpi9bTb2uTK1qnPo1xFSBxs6YmFyprk=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "be926cb1a76e8450ab2b92121b2e88d09fa4d41c", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_2": { + "inputs": { + "nixpkgs": [ + "wayland-bar", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773630837, + "narHash": "sha256-zJhgAGnbVKeBMJOb9ctZm4BGS/Rnrz+5lfSXTVah4HQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f600ea449c7b5bb596fa1cf21c871cc5b9e31316", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "wayland-bar": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1773784783, + "narHash": "sha256-T3oP3c75kt0Ef+uO3D9qy85VucA4mzhuREWz3FZBTSg=", + "ref": "refs/heads/main", + "rev": "58166358ba26a277d59fafd852ca7b10f1dbd442", + "revCount": 7, + "type": "git", + "url": "https://git.stribrny.org/max_ag/wayland_panel" + }, + "original": { + "type": "git", + "url": "https://git.stribrny.org/max_ag/wayland_panel" + } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.7", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773737882, + "narHash": "sha256-P6k0BtT1/idYveVRdcwAZk8By9UjZW8XOMhSoS6wTBY=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "a7f1db35d74faf04e5189b3a32f890186ace5c28", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index d704145..e681259 100644 --- a/flake.nix +++ b/flake.nix @@ -1,11 +1,57 @@ { + description = "My nixos dots :3"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - flake-parts.url = "github:/hercules-cli/flake-parts"; - import-tree.url = "github:vic/import-tree"; - }; + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; - outputs = inputs: - inputs.flake-parts.lib.mkFlake {inherit inputs;} - (inputs.import-tree [./modules]); + nvf = { + url = "github:notashelf/nvf/007f14a2c8d67568f4655654b401871920d73011"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + awww = { + url = "git+https://codeberg.org/LGFae/awww"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + niri-flake = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + floating-calc = { + url = "git+https://git.stribrny.org/max_ag/floating-calculator?rev=2abbacf66e99db523d624037f3e449aa40e8f366"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = inputs @ { + nixpkgs, + home-manager, + ... + }: { + nixosConfigurations.benag = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = {inherit inputs;}; + modules = [ + ./configuration/main/configuration.nix + home-manager.nixosModules.default + { + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + users.benag = ./home/home.nix; + }; + } + ]; + }; + }; } diff --git a/home/home.nix b/home/home.nix new file mode 100644 index 0000000..aa18a1c --- /dev/null +++ b/home/home.nix @@ -0,0 +1,62 @@ +{ + pkgs, + inputs, + ... +}: { + home = { + username = "benag"; + homeDirectory = "/home/benag"; + stateVersion = "25.11"; + }; + + programs.home-manager.enable = true; + + imports = [ + ./modules/niri.nix + + ./modules/bspwm.nix + ./modules/sxhkd.nix + + ./modules/picom.nix + + ./modules/shells.nix + ./modules/zellij.nix + ./modules/nvf.nix + ./modules/kitty.nix + ./modules/foot.nix + ./modules/polybar.nix + ./modules/waybar.nix + ./modules/fastfetch.nix + ./modules/cursor.nix + ./modules/git.nix + ./modules/create-project/create-project.nix + ]; + + home.packages = [ + inputs.zen-browser.packages."x86_64-linux".default + pkgs.bspwm + pkgs.sxhkd + + inputs.awww.packages.x86_64-linux.awww + pkgs.feh + pkgs.picom + + pkgs.wofi + pkgs.neovim + pkgs.kitty + pkgs.foot + pkgs.fastfetch + pkgs.pavucontrol + pkgs.btop + pkgs.playerctl + pkgs.dunst + pkgs.zellij + inputs.floating-calc.packages.x86_64-linux.default + + pkgs.discord + pkgs.heroic + pkgs.prismlauncher + pkgs.protonup-ng + pkgs.easyeffects + ]; +} diff --git a/home/modules/bspwm.nix b/home/modules/bspwm.nix new file mode 100644 index 0000000..3db7e48 --- /dev/null +++ b/home/modules/bspwm.nix @@ -0,0 +1,49 @@ +{ + xsession.windowManager.bspwm = { + enable = true; + + settings = { + focus_follows_pointer = true; + pointer_follows_focus = true; + pointer_follows_monitor = true; + }; + + monitors = { + DVI-I-1 = [ + "I" + "II" + "III" + "IV" + "V" + "VI" + "VII" + "VIII" + "IX" + "X" + ]; + + HDMI-0 = [ + "I" + "II" + "III" + "IV" + "V" + "VI" + "VII" + "VIII" + "IX" + "X" + ]; + }; + + extraConfig = '' + feh --bg-fill "/home/benag/.nix-config/assets/pictures/bocchi_wallpaper.png" + xsetroot -cursor_name left_ptr & + ''; + + startupPrograms = [ + "polybar primary" + "polybar secondary" + ]; + }; +} diff --git a/home/modules/create-project/create-project.nix b/home/modules/create-project/create-project.nix new file mode 100644 index 0000000..6acb525 --- /dev/null +++ b/home/modules/create-project/create-project.nix @@ -0,0 +1,62 @@ +{pkgs, ...}: { + home.packages = [ + (pkgs.writeScriptBin "create-project" + '' + #!${pkgs.nushell}/bin/nu + + def main [ + type?: string + name?: string + --local (-l) + ] { + + if $name == null or $type == null { + print "Usage: create-project [Options: -l]" + exit 1 + } + + if ($name | str contains "/") or ($name | str contains ".") { + print "This is not a valid name for a project" + exit 1 + } + + if ($type | str contains "/") or ($type | str contains ".") { + print "This is not a valid project type" + exit 1 + } + + mkdir $name + cd $name + + if ($"~/.nix-config/home/modules/create-project/project-blueprints/($type)" | path expand | ls $in | length) > 0 { + glob $"~/.nix-config/home/modules/create-project/project-blueprints/($type)/*" | each { |file| cp $file . } + } + + if ($"./init.sh" | path type) == "file" { + bash $"./init.sh" $name + rm "init.sh" + } + + echo "use flake" | save .envrc + direnv allow + + git init + git add . + git commit -m "Project setup" + + if $local { + print "You are all done" + exit 0 + } + + ${pkgs.tea}/bin/tea repos create --name $name + git remote add origin $"https://git.stribrny.org/ben_ag/($name).git" + git push -u origin main + + print "You are all done" + exit 0 + + } + '') + ]; +} diff --git a/home/modules/create-project/project-blueprints/python/flake.nix b/home/modules/create-project/project-blueprints/python/flake.nix new file mode 100644 index 0000000..76fc5cf --- /dev/null +++ b/home/modules/create-project/project-blueprints/python/flake.nix @@ -0,0 +1,23 @@ +{ + description = "My python development shell"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + }; + outputs = {nixpkgs, ...}: let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + }; + in { + devShells."${system}" = { + default = pkgs.mkShell { + packages = [ + (pkgs.python3.withPackages (python-pkgs: [ + python-pkgs.numpy + python-pkgs.pandas + ])) + ]; + }; + }; + }; +} diff --git a/home/modules/create-project/project-blueprints/python/main.py b/home/modules/create-project/project-blueprints/python/main.py new file mode 100644 index 0000000..cd9ac48 --- /dev/null +++ b/home/modules/create-project/project-blueprints/python/main.py @@ -0,0 +1,6 @@ +def main(): + pass + + +if __name__ == "__main__": + main() diff --git a/home/modules/create-project/project-blueprints/rust/.gitignore b/home/modules/create-project/project-blueprints/rust/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/home/modules/create-project/project-blueprints/rust/.gitignore @@ -0,0 +1 @@ +target diff --git a/home/modules/create-project/project-blueprints/rust/flake.nix b/home/modules/create-project/project-blueprints/rust/flake.nix new file mode 100644 index 0000000..3b6f7ce --- /dev/null +++ b/home/modules/create-project/project-blueprints/rust/flake.nix @@ -0,0 +1,29 @@ +{ + description = "My rust development shell"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = {nixpkgs, ...} @ inputs: let + system = "x86_64-linux"; + overlays = [(import inputs.rust-overlay)]; + pkgs = import nixpkgs { + inherit system overlays; + }; + in { + devShells."${system}" = { + default = pkgs.mkShell { + buildInputs = with pkgs; [ + gcc + gnumake + rust-bin.stable.latest.default + evcxr + ]; + }; + }; + }; +} diff --git a/home/modules/create-project/project-blueprints/rust/init.sh b/home/modules/create-project/project-blueprints/rust/init.sh new file mode 100644 index 0000000..c925bdc --- /dev/null +++ b/home/modules/create-project/project-blueprints/rust/init.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +nix develop . --command bash -c "cargo new $1" + +cp -r "$1"/* . +rm -fr "$1" diff --git a/home/modules/cursor.nix b/home/modules/cursor.nix new file mode 100644 index 0000000..a705c86 --- /dev/null +++ b/home/modules/cursor.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; + size = 14; + }; +} diff --git a/home/modules/fastfetch.nix b/home/modules/fastfetch.nix new file mode 100644 index 0000000..d545bfe --- /dev/null +++ b/home/modules/fastfetch.nix @@ -0,0 +1,88 @@ +{ + programs.fastfetch = { + enable = true; + + settings = { + logo = { + source = "/home/benag/.nix-config/assets/bocchi/bocchi.txt"; + padding = { + top = 1; + left = 1; + }; + }; + + display = { + separator = " -> "; + }; + + modules = [ + "break" + { + type = "custom"; + format = "β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€Hardware──────────────────────┐"; + } + { + type = "title"; + key = " PC"; + keyColor = "green"; + } + { + type = "disk"; + key = "β”‚ β”œο’‰"; + device = "/dev/sdb"; + keyColor = "green"; + } + + { + type = "cpu"; + key = "β”‚ β”œο’Ό"; + keyColor = "green"; + } + { + type = "gpu"; + key = "β”‚ β”œσ°›"; + keyColor = "green"; + } + { + type = "memory"; + key = "β”” └󰍛"; + keyColor = "green"; + } + { + type = "custom"; + format = "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜"; + } + "break" + { + type = "custom"; + format = "β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€Software──────────────────────┐"; + } + { + type = "os"; + key = "󰻀 OS"; + keyColor = "yellow"; + } + { + type = "kernel"; + key = "β”‚ β”œο€“"; + keyColor = "yellow"; + } + { + type = "packages"; + key = "β”‚ β”œσ°–"; + keyColor = "yellow"; + } + { + type = "shell"; + key = "β”” β””ο’‰"; + keyColor = "yellow"; + } + + { + type = "custom"; + format = "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜"; + } + ]; + }; + }; +} diff --git a/home/modules/foot.nix b/home/modules/foot.nix new file mode 100644 index 0000000..4d3e8a0 --- /dev/null +++ b/home/modules/foot.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + home.packages = [pkgs.nerd-fonts.jetbrains-mono]; + + programs.foot = { + enable = true; + + settings = { + main = { + font = "JetBrainsMono Nerd Font:size=10"; + }; + + colors-dark = { + alpha = "0.75"; + }; + }; + }; +} diff --git a/home/modules/git.nix b/home/modules/git.nix new file mode 100644 index 0000000..cd9b46f --- /dev/null +++ b/home/modules/git.nix @@ -0,0 +1,13 @@ +{pkgs, ...}: { + programs.git = { + enable = true; + package = pkgs.gitFull; + settings = { + user.name = "benstrb"; + user.email = "ben.stribrny@gmail.com"; + init.defaultBranch = "main"; + github.user = "benstrb"; + credential.helper = "store"; + }; + }; +} diff --git a/home/modules/kitty.nix b/home/modules/kitty.nix new file mode 100644 index 0000000..b109f14 --- /dev/null +++ b/home/modules/kitty.nix @@ -0,0 +1,9 @@ +{ + programs.kitty = { + enable = false; + + settings = { + background_opacity = 0.75; + }; + }; +} diff --git a/home/modules/niri.nix b/home/modules/niri.nix new file mode 100644 index 0000000..2f2bc12 --- /dev/null +++ b/home/modules/niri.nix @@ -0,0 +1,169 @@ +{inputs, ...}: { + imports = [inputs.niri-flake.homeModules.niri]; + + programs.niri = { + enable = true; + + settings = { + spawn-at-startup = [ + {command = ["awww-daemon"];} + {command = ["awww" "img" "/home/benag/.nix-config/assets/pictures/bocchi_wallpaper.png"];} + ]; + + input = { + keyboard = { + xkb = { + layout = "cz"; + options = "caps:escape"; + }; + }; + }; + + outputs = { + "DVI-D-1".mode = { + width = 1920; + height = 1080; + }; + + "HDMI-A-1".mode = { + width = 1680; + height = 1050; + }; + }; + + environment = { + NIXOS_OZONE_WL = "1"; + SDL_VIDEODRIVER = "wayland"; + CLUTTER_BACKEND = "wayland"; + }; + + gestures = { + hot-corners.enable = false; + }; + + layout = { + gaps = 2; + + default-column-width = {proportion = 0.5;}; + + preset-column-widths = [ + {proportion = 0.33333;} + {proportion = 0.5;} + {proportion = 0.66667;} + {proportion = 1.0;} + ]; + + preset-window-heights = [ + {proportion = 0.33333;} + {proportion = 0.5;} + {proportion = 0.66667;} + {proportion = 1.0;} + ]; + + border = { + enable = true; + active.color = "#feb6c7"; + width = 2; + }; + + shadow.enable = false; + focus-ring.enable = false; + }; + + prefer-no-csd = true; + cursor.size = 14; + screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; + hotkey-overlay.skip-at-startup = true; + + window-rules = [ + /* + { + geometry-corner-radius = { + top-left = 2.0; + top-right = 2.0; + bottom-left = 2.0; + bottom-right = 2.0; + }; + } + */ + { + clip-to-geometry = true; + } + ]; + + input = { + keyboard.numlock = true; + warp-mouse-to-focus.enable = true; + + focus-follows-mouse = { + enable = true; + max-scroll-amount = "0%"; + }; + }; + + binds = { + "Mod+Q".action.close-window = []; + "Mod+Return".action.spawn = ["foot"]; + "Mod+A".action.spawn = ["wofi" "--show" "drun"]; + "Mod+B".action.spawn = ["zen-beta"]; + "Mod+D".action.spawn = ["discord"]; + + "Mod+O".action.toggle-overview = []; + + "Mod+Alt+H".action.focus-monitor-left = []; + "Mod+Alt+L".action.focus-monitor-right = []; + + "Mod+Alt+Left".action.focus-monitor-left = []; + "Mod+Alt+Right".action.focus-monitor-right = []; + + "Mod+Ctrl+J".action.focus-workspace-down = []; + "Mod+Ctrl+K".action.focus-workspace-up = []; + + "Mod+Ctrl+Down".action.focus-workspace-down = []; + "Mod+Ctrl+Up".action.focus-workspace-up = []; + + "Mod+H".action.focus-column-left = []; + "Mod+L".action.focus-column-right = []; + "Mod+J".action.focus-window-down = []; + "Mod+K".action.focus-window-up = []; + + "Mod+Left".action.focus-column-left = []; + "Mod+Right".action.focus-column-right = []; + "Mod+Down".action.focus-window-down = []; + "Mod+Up".action.focus-window-up = []; + + "Mod+WheelScrollDown".action.focus-column-right = []; + "Mod+WheelScrollUp".action.focus-column-left = []; + + "Mod+Y".action.consume-or-expel-window-left = []; + "Mod+X".action.consume-or-expel-window-right = []; + + "Mod+R".action.switch-preset-column-width = []; + "Mod+Shift+R".action.switch-preset-window-height = []; + "Mod+F".action.maximize-column = []; + "Mod+Shift+F".action.fullscreen-window = []; + "Mod+V".action.toggle-window-floating = []; + + "Mod+Minus".action.set-column-width = ["-10%"]; + "Mod+Equal".action.set-column-width = ["+10%"]; + + "Mod+Shift+Q".action.quit = []; + + "Print".action.screenshot = []; + "Ctrl+Print".action.screenshot-screen = []; + "Alt+Print".action.screenshot-window = []; + + "Mod+Escape".action.toggle-keyboard-shortcuts-inhibit = []; + + "XF86AudioPlay".action.spawn = ["playerctl" "play-pause"]; + "XF86AudioNext".action.spawn = ["playerctl" "next"]; + "XF86AudioPrev".action.spawn = ["playerctl" "previous"]; + "XF86AudioStop".action.spawn = ["playerctl" "stop"]; + + "XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"]; + "XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]; + "xF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"]; + }; + }; + }; +} diff --git a/home/modules/nvf.nix b/home/modules/nvf.nix new file mode 100644 index 0000000..f658e48 --- /dev/null +++ b/home/modules/nvf.nix @@ -0,0 +1,164 @@ +{ + pkgs, + lib, + inputs, + ... +}: { + imports = [ + inputs.nvf.homeManagerModules.default + ]; + + programs.nvf = { + enable = true; + enableManpages = true; + + settings.vim = { + theme = { + enable = true; + transparent = true; + + name = "catppuccin"; + style = "mocha"; + }; + + lsp = { + enable = true; + null-ls.enable = false; + + inlayHints.enable = true; + formatOnSave = true; + lspkind.enable = true; + lspsaga.enable = true; + trouble.enable = true; + }; + + debugger = { + nvim-dap = { + enable = true; + ui.enable = true; + }; + }; + + options = { + tabstop = 2; + expandtab = false; + autoindent = true; + shiftwidth = 2; + }; + + clipboard = { + enable = true; + registers = "unnamedplus"; + providers = { + wl-copy = { + enable = true; + package = pkgs.wl-clipboard; + }; + }; + }; + + languages = { + enableFormat = true; + enableTreesitter = true; + enableExtraDiagnostics = true; + + nix.enable = true; + markdown.enable = true; + + nu.enable = true; + bash.enable = true; + + css.enable = true; + html = { + enable = true; + format.enable = true; + lsp.servers = [ + "emmet-ls" + "superhtml" + ]; + }; + + python.enable = true; + + sql.enable = false; + qml.enable = true; + qml.format.enable = true; + ts.enable = true; + zig.enable = true; + csharp.enable = true; + rust = { + enable = true; + extensions.crates-nvim.enable = true; + }; + }; + + visuals = { + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; + fidget-nvim.enable = true; + + highlight-undo.enable = true; + indent-blankline.enable = true; + }; + + statusline = { + lualine = { + enable = true; + }; + }; + + autopairs.nvim-autopairs.enable = true; + + autocomplete = { + nvim-cmp.enable = true; + blink-cmp.enable = false; + }; + + snippets.luasnip.enable = true; + + telescope.enable = true; + + git = { + enable = true; + }; + + dashboard.alpha.enable = true; + + notify.nvim-notify.enable = true; + + projects.project-nvim.enable = true; + + utility = { + ccc.enable = true; + diffview-nvim.enable = true; + icon-picker.enable = true; + surround.enable = true; + + motion = { + hop.enable = true; + leap.enable = true; + }; + }; + + comments.comment-nvim.enable = true; + + ui = { + noice.enable = true; + colorizer.enable = true; + illuminate.enable = true; + + fastaction.enable = true; + }; + }; + }; + + xdg.desktopEntries.nvim-foot = { + name = "Neovim (foot)"; + comment = "Edit text files with Neovim in foot terminal"; + icon = "nvim"; + exec = "foot -e nvim %F"; + categories = ["Utility" "TextEditor" "Development"]; + mimeType = ["text/plain" "text/x-makefile" "application/x-shellscript"]; + }; +} diff --git a/home/modules/picom.nix b/home/modules/picom.nix new file mode 100644 index 0000000..aa0350d --- /dev/null +++ b/home/modules/picom.nix @@ -0,0 +1,7 @@ +{ + services.picom = { + enable = false; + + backend = "glx"; + }; +} diff --git a/home/modules/polybar.nix b/home/modules/polybar.nix new file mode 100644 index 0000000..d005518 --- /dev/null +++ b/home/modules/polybar.nix @@ -0,0 +1,149 @@ +{pkgs, ...}: { + services.polybar = { + enable = false; + + package = pkgs.polybar.override { + mpdSupport = true; + }; + + script = '' + polybar primary & + polybar secondary & + ''; + + settings = { + "colors" = { + fg = "#fafafa"; + fg-alt = "#bdbdbd"; + + purple = "#d500f9"; + red = "#ff1744"; + + trans = "#00000000"; + }; + + "bar/primary" = { + monitor = "DVI-I-1"; + + width = "100%"; + height = "30"; + offset-y = "0"; + top = "true"; + fixed-center = "true"; + + wm-restack = "bspwm"; + + override-redirect = "false"; + + scroll-up = "next"; + scroll-down = "prev"; + + enable-ipc = "true"; + + background = "\${colors.trans}"; + foreground = "\${colors.fg}"; + + font-0 = "monospace:size=10;2"; + font-1 = "monospace:size=10;2"; + font-2 = "monospace:size=10;2"; + font-3 = "monospace:size=10;2"; + font-4 = "monospace:size=10;2"; + font-5 = "monospace:size=10;2"; + font-6 = "monospace:size=10;2"; + font-7 = "monospace:size=12;3"; + + cursor-click = "pointer"; + cursor-scroll = "ns-resize"; + + modules-left = "bspwm"; + modules-right = "date"; + }; + + "bar/secondary" = { + monitor = "HDMI-0"; + + width = "100%"; + height = "30"; + offset-y = "0"; + top = "true"; + fixed-center = "true"; + + wm-restack = "bspwm"; + + override-redirect = "false"; + + scroll-up = "next"; + scroll-down = "prev"; + + enable-ipc = "true"; + + background = "\${colors.trans}"; + foreground = "\${colors.fg}"; + + font-0 = "monospace:size=10;2"; + font-1 = "monospace:size=10;2"; + font-2 = "monospace:size=10;2"; + font-3 = "monospace:size=10;2"; + font-4 = "monospace:size=10;2"; + font-5 = "monospace:size=10;2"; + font-6 = "monospace:size=10;2"; + font-7 = "monospace:size=12;3"; + + cursor-click = "pointer"; + cursor-scroll = "ns-resize"; + + modules-left = "bspwm"; + modules-right = "date"; + }; + + "module/bspwm" = { + type = "internal/bspwm"; + + format = " "; + + label-focused = "%{T7}●%{T-}"; + label-focused-foreground = "\${colors.purple}"; + label-focused-padding = 1; + + label-occupied = "%{T7}●%{T-}"; + label-occupied-foreground = "\${colors.fg-alt}"; + label-occupied-padding = 1; + + label-urgent = "%{T7}●%{T-}"; + label-urgent-foreground = "\${colors.red}"; + label-urgent-padding = 1; + + label-empty = "%{T7}β—‹%{T-}"; + label-empty-foreground = "\${colors.fg-alt}"; + label-empty-padding = 1; + + label-locked = "%{T7}●%{T-}"; + label-locked-foreground = "\${colors.fg}"; + label-locked-padding = 1; + + label-sticky = "%{T7}●%{T-}"; + label-sticky-foreground = "\${colors.fg}"; + label-sticky-padding = 1; + + label-private = "%{T7}●%{T-}"; + label-private-foreground = "\${colors.fg}"; + label-private-padding = 1; + + label-marked = "%{T7}●%{T-}"; + label-marked-foreground = "\${colors.fg}"; + label-marked-padding = 1; + }; + + "module/date" = { + type = "internal/date"; + interval = 1; + time = "%H:%M"; + time-alt = "%a, %b %d %H:%M:%S"; + format = "