diff --git a/README.md b/README.md new file mode 100644 index 0000000..343f9cb --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# My dotfiles for NixOs + +If like me, you don't want to use flakes, I guess you can take inspiration from this ¯\\\_(ツ)_/¯ + +## Credits +- `tamal/default.nix` — from [Nixtamal](https://nixtamal.toast.al/) + © original authors, licensed under ISC +- `home/doggo/backgrounds/ubuntu_budgie_wallpaper1.jpg` — from [Ubuntu Budgie Wallpapers](https://github.com/UbuntuBudgie/budgie-wallpapers), + © original authors, licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) \ No newline at end of file diff --git a/bootloader.nix b/bootloader.nix new file mode 100644 index 0000000..a6f0d2b --- /dev/null +++ b/bootloader.nix @@ -0,0 +1,45 @@ +{ pkgs, ... }: + +{ + catppuccin.plymouth.enable = false; + + # Bootloader. + boot = { + loader = { + grub.enable = false; + systemd-boot.enable = false; + limine.enable = true; + + limine.secureBoot = { + enable = true; + autoEnrollKeys.enable = true; + }; + + efi.canTouchEfiVariables = true; + + # 0 = Hide the OS choice for bootloaders. + # It would still be possible to open the bootloader list by pressing any key + # It just would not appear on screen unless a key is pressed + timeout = 5; + }; + + plymouth = { + enable = true; + theme = "owl"; + themePackages = with pkgs; [ + (adi1090x-plymouth-themes.override { + selected_themes = [ "owl" ]; + }) + ]; + }; + + # Enables "Silent boot" + consoleLogLevel = 3; + initrd.verbose = false; + kernelParams = [ + "quiet" + "rd.udev.log_level=3" + "rd.systemd.show_status=auto" + ]; + }; +} diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..ca1c95f --- /dev/null +++ b/configuration.nix @@ -0,0 +1,144 @@ +{ config, lib, ... }: + +# This should be in /etc/nixos/ together with the rest. + +# For the nixos channel +# nix-channel --add https://channels.nixos.org/nixos-unstable nixos && nix-channel --update + +# To fix problems sometimes: +# sudo nixos-rebuild switch -I nixos-config=/etc/nixos/configuration.nix + +let + nixtamal = import ./tamal { + bootstrap-nixpkgs = ; # Apparently a little bit impure but faster. (can be removed) + }; + + # self = final package set, super = pre-overlay nixpkgs + # super.lib: avoids circular dependencies + # self.callPackage: local packages can see each other and other overlays + localPackagesOverlay = self: super: super.lib.packagesFromDirectoryRecursive { + callPackage = self.callPackage; + directory = ./local_packages; + }; + + pkgs = import nixtamal.nixpkgs { + config.allowUnfree = true; + overlays = [ + # CachyOS kernels repo + (import nixtamal.nix-cachyos-kernel).overlays.default + # Nix-Citizen tools overlay (for dw-proton-bin notably) + (import nixtamal.nix-citizen).overlays.steamcompattools + # Local packages + localPackagesOverlay + ]; + }; +in +{ + nixpkgs.pkgs = pkgs; # Uses the nixtamal nixpkgs + + imports = + [ + ./local.nix + ./hardware-configuration.nix # Results of the hardware scan ("nixos-generate-config" command) + "${nixtamal.home-manager}/nixos" + "${nixtamal.catppuccin}/modules/nixos" + "${nixtamal.nix-cachyos-settings}/module.nix" + ./bootloader.nix + ./modules/system-packages.nix + ./modules/fonts.nix + ./modules/hyprland.nix + ./modules/kernel.nix + ./modules/networking.nix + ]; + + home-manager.useUserPackages = true; # Puts user packages in /etc/profiles + home-manager.useGlobalPkgs = false; # Home-manager inherits the pkgs path since NixOS 20.09 (unlike what the docs seem to say), meaning it uses my pinned nixpkgs source already + nix.settings.auto-optimise-store = true; + nix.settings.experimental-features = [ "nix-command" "blake3-hashes" ]; # blake3 is for nixtamal + + catppuccin = { + autoEnable = true; + enable = true; + accent = "red"; + flavor = "mocha"; + }; + + # Set your time zone. + time.timeZone = "Europe/Paris"; + + # Select internationalisation properties. + i18n.defaultLocale = "fr_FR.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "fr_FR.UTF-8"; + LC_IDENTIFICATION = "fr_FR.UTF-8"; + LC_MEASUREMENT = "fr_FR.UTF-8"; + LC_MONETARY = "fr_FR.UTF-8"; + LC_NAME = "fr_FR.UTF-8"; + LC_NUMERIC = "fr_FR.UTF-8"; + LC_PAPER = "fr_FR.UTF-8"; + LC_TELEPHONE = "fr_FR.UTF-8"; + LC_TIME = "fr_FR.UTF-8"; + }; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "fr"; + variant = ""; + }; + + # Configure console keymap + console.keyMap = "fr"; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users."doggo" = { + isNormalUser = true; + description = "Charlie Quinet"; + extraGroups = [ "networkmanager" "wheel" "networkmanager" "video" "input" "audio" "kvm" ]; + }; + + home-manager.extraSpecialArgs = { + inherit nixtamal; + }; + home-manager.users.doggo = import ./home/doggo/doggo.nix; + + security.polkit.enable = true; + + cachyos.settings = { + enable = true; + zram.enable = false; + debuginfod.enable = false; + }; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = true; + AllowUsers = null; + UseDns = true; + X11Forwarding = true; + PermitRootLogin = "prohibit-password"; + }; + }; + + # Extra security (especially for SSH) + services.fail2ban.enable = true; + + # To disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "26.11"; # Did you read the comment? +} diff --git a/home/doggo/backgrounds/ubuntu_budgie_wallpaper1.jpg b/home/doggo/backgrounds/ubuntu_budgie_wallpaper1.jpg new file mode 100644 index 0000000..e0f67c0 Binary files /dev/null and b/home/doggo/backgrounds/ubuntu_budgie_wallpaper1.jpg differ diff --git a/home/doggo/catppuccin-config.nix b/home/doggo/catppuccin-config.nix new file mode 100644 index 0000000..3a87216 --- /dev/null +++ b/home/doggo/catppuccin-config.nix @@ -0,0 +1,39 @@ +{ config, pkgs, nixtamal, ... }: + +let + shared_theme = "Catppuccin-GTK-Red-Dark"; +in +{ + catppuccin = { + autoEnable = true; + enable = true; + flavor = "mocha"; + accent = "red"; + cursors.enable = true; + obs.enable = true; + mangohud.enable = false; + }; + + home.pointerCursor.size = 24; + + gtk = { + enable = true; + colorScheme = "dark"; + theme = { + name = shared_theme; + package = pkgs.magnetic-catppuccin-gtk; + }; + }; + + home.sessionVariables.GTK_THEME = shared_theme; + + # Editor → Editor Settings → Text Editor → Theme + xdg.configFile."godot/text_editor_themes/Catppuccin Mocha.tet".source = nixtamal.catppuccin-godot; # Godot editor theme + + # Editor → Editor Settings → Interface → Theme + # Godot interface colors: + # Base Color: #1e1e2e + # Accent: #cba6f7 + # Contrast: 0.2 + # Icon Saturation: 0.6 +} diff --git a/home/doggo/discord-config.nix b/home/doggo/discord-config.nix new file mode 100644 index 0000000..d16dd8d --- /dev/null +++ b/home/doggo/discord-config.nix @@ -0,0 +1,3 @@ +{ + home.file.".config/Equicord/themes/quickCss.css".source = ./discord_css/myClearVisionV7.css; +} diff --git a/home/doggo/discord_css/myClearVisionV7.css b/home/doggo/discord_css/myClearVisionV7.css new file mode 100644 index 0000000..0a90e9e --- /dev/null +++ b/home/doggo/discord_css/myClearVisionV7.css @@ -0,0 +1,89 @@ +/** + * @name Transparent Theme + * @version ClearVision v7.0.0 + * @description Transparent Discord Theme Make Using ClearVision 7.0.0 + * @source https://github.com/ClearVision/ClearVision-v7 + * @website https://clearvision.github.io + */ +/* IMPORT CSS */ +@import url("https://clearvision.github.io/ClearVision-v7/main.css"); +@import url("https://clearvision.github.io/ClearVision-v7/betterdiscord.css"); +/* SETTINGS */ +:root { + /* ACCENT COLORS */ + --main-color: #f38ba8; + --hover-color: #f38ba8; + --success-color: #a6e3a1; + --danger-color: #982929; + /* STATUS COLORS */ + --online-color: #a6e3a1; + --idle-color: #fab387; + --dnd-color: #982929; + --streaming-color: #593695; + --offline-color: #7f849c; + /* APP BACKGROUND */ + --background-shading-percent: 100%; + --background-image: transparent; + --background-attachment: fixed; + --background-filter: saturate(calc(var(--saturation-factor, 1) * 1)); + /* USER POPOUT BACKGROUND */ + --user-popout-image: var(--background-image); + --user-popout-attachment: var(--background-attachment); + --user-popout-filter: var(--background-filter); + /* USER MODAL BACKGROUND */ + --user-modal-image: var(--background-image); + --user-modal-attachment: var(--background-attachment); + --user-modal-filter: var(--background-filter); + /* HOME ICON */ + --home-icon: url(https://clearvision.github.io/icons/discord.svg); + /* FONTS */ + --main-font: "gg sans", Whitney, "Helvetica Neue", Helvetica, Arial, sans-serif; + --code-font: Consolas, "gg mono", "Liberation Mono", Menlo, Courier, monospace; +} + +/* THEME SPECIFIC SHADING */ +/* LIGHT THEME */ +:is(.theme-light, .theme-dark .theme-light) { + --background-shading: rgba(252, 252, 252, 0.3); + --card-shading: rgba(252, 252, 252, 0.3); + --popout-shading: rgba(252, 252, 252, 0.7); + --modal-shading: rgba(252, 252, 252, 0.5); + --input-shading: rgba(0, 0, 0, 0.3); + --normal-text: #36363c; + --muted-text: #75757e; +} + +/* ASH THEME */ +:is(.theme-dark, .theme-light .theme-dark) { + --background-shading: rgba(0, 0, 0, 0.4); + --card-shading: rgba(0, 0, 0, 0.2); + --popout-shading: rgba(0, 0, 0, 0.6); + --modal-shading: rgba(0, 0, 0, 0.4); + --input-shading: rgba(255, 255, 255, 0.05); + --normal-text: #d8d8db; + --muted-text: #aeaeb4; +} + +/* DARK THEME */ +:is(.theme-darker, .theme-light .theme-darker) { + --background-shading: rgba(0, 0, 0, 0.6); + --card-shading: rgba(0, 0, 0, 0.3); + --popout-shading: rgba(0, 0, 0, 0.7); + --modal-shading: rgba(0, 0, 0, 0.5); + --input-shading: rgba(255, 255, 255, 0.05); + --normal-text: #fbfbfb; + --muted-text: #94949c; +} + +/* ONYX THEME */ +:is(.theme-midnight, .theme-light .theme-midnight) { + --background-shading: rgba(0, 0, 0, 0.8); + --card-shading: rgba(0, 0, 0, 0.4); + --popout-shading: rgba(0, 0, 0, 0.8); + --modal-shading: rgba(0, 0, 0, 0.6); + --input-shading: rgba(255, 255, 255, 0.05); + --normal-text: #dcdcde; + --muted-text: #86868e; +} + +/* ADD ADDITIONAL CSS BELOW HERE */ \ No newline at end of file diff --git a/home/doggo/doggo.nix b/home/doggo/doggo.nix new file mode 100644 index 0000000..484df8b --- /dev/null +++ b/home/doggo/doggo.nix @@ -0,0 +1,133 @@ +{ config, pkgs, nixtamal, ... }: + +{ + home.username = "doggo"; + home.homeDirectory = "/home/doggo"; + xdg.userDirs = { + enable = true; + createDirectories = true; + desktop = "${config.home.homeDirectory}/Bureau"; + documents = "${config.home.homeDirectory}/Documents"; + download = "${config.home.homeDirectory}/Téléchargements"; + music = "${config.home.homeDirectory}/Musique"; + pictures = "${config.home.homeDirectory}/Images"; + videos = "${config.home.homeDirectory}/Vidéos"; + templates = "${config.home.homeDirectory}/Modèles"; + publicShare = "${config.home.homeDirectory}/Public"; + }; + + nixpkgs.config.allowUnfree = true; + nixpkgs.config.android_sdk.accept_license = true; + nixpkgs.overlays = [ + (import nixtamal.dolphin-overlay) + (import nixtamal.nix-citizen).overlays.default + ]; + + home.packages = with pkgs; [ + kitty + kdePackages.kate + (discord-canary.override { + withOpenASAR = true; + withEquicord = true; + }) + kdePackages.qtsvg # Needed for icons in KDE Dolphin + kdePackages.dolphin + kdePackages.ark zip unzip + kdePackages.kio # For network shares + kdePackages.kio-fuse + kdePackages.kio-extras + kdePackages.gwenview + kdePackages.filelight + mission-center + (pkgs.wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + obs-vaapi + obs-gstreamer + obs-vkcapture + ]; + }) + (ani-cli.overrideAttrs (old: { version = "unstable"; src = nixtamal.ani-cli; })) + anime4k + spotify + jetbrains.idea + jetbrains.clion + #androidStudioPackages.canary.full + androidStudioForPlatformPackages.canary # Android studio but better for AOSP dev + lmms-full + gnome-feeds + vulkan-tools mesa-demos # vkcube & glxgears + + # Gaming packages: + (prismlauncher.override { + jdks = [ + graalvmPackages.graalvm-ce + pkgs.jdk25 + pkgs.jdk21 + ]; + }) + rsi-launcher-git + osu-lazer-bin + godot + wowup-cf + ]; + + imports = [ + "${nixtamal.catppuccin}/modules/home-manager" + ./catppuccin-config.nix + ./hyprland-config.nix + ./ironbar-config.nix + ./rofi-config.nix + ./kitty-config.nix + ./discord-config.nix + ./firefox-config.nix + ./mpv-config.nix + ]; + + qt = { + enable = true; + platformTheme.name = "qtct"; + style.name = "kvantum"; + }; + + programs.bash.enable = true; # Needed for session variables + home.sessionVariables = { + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + + PROTON_USE_NTSYNC = "1"; + PROTON_ENABLE_WAYLAND = "1"; + }; + + programs = { + mangohud = { + enable = true; + settings = { + gpu_stats = true; + gpu_temp = true; + gpu_junction_temp = true; + gpu_core_clock = true; + gpu_mem_temp = true; + gpu_mem_clock = true; + gpu_power = true; + gpu_fan = true; + gpu_voltage = true; + cpu_stats = true; + cpu_mhz = true; + vram = true; + fps = true; + frametime = true; + gpu_name = true; + vulkan_driver = true; + wine = true; + winesync = true; + frame_timing = true; + text_outline = true; + }; + }; + }; + + home.stateVersion = "26.11"; +} diff --git a/home/doggo/firefox-config.nix b/home/doggo/firefox-config.nix new file mode 100644 index 0000000..214c901 --- /dev/null +++ b/home/doggo/firefox-config.nix @@ -0,0 +1,53 @@ +{ options, config, pkgs, lib, ... }: + +let + lock-false = { + Value = false; + Status = "locked"; + }; + lock-true = { + Value = true; + Status = "locked"; + }; +in +{ + programs.firefox = { + configPath = "${config.home.homeDirectory}/.mozilla/firefox"; + package = pkgs.firefox-bin; + enable = true; + languagePacks = [ "fr-fr" ]; + profiles = { + default = { + id = 0; + name = "doggo"; + isDefault = true; + extensions.force = true; + userChrome = (builtins.readFile ./firefox_css/userChrome.css); + userContent = (builtins.readFile ./firefox_css/userContent.css); + }; + }; + + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + DisablePocket = true; + AppAutoUpdate = false; + BackgroundAppUpdate = false; + + HardwareAcceleration = true; + + Preferences = { + "extensions.pocket.enabled" = lock-false; + "dom.security.https_only_mode" = lock-true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = lock-true; + "browser.tabs.allow_transparent_browser" = lock-true; + "widget.use-xdg-desktop-portal.file-picker" = 1; + "devtools.chrome.enabled" = true; + "browser.newtabpage.activity-stream.widgets.enabled" = lock-false; + + "gfx.webrender.all" = lock-true; + "layers.gpu-process.force-enabled" = lock-true; + }; + }; + }; +} diff --git a/home/doggo/firefox_css/userChrome.css b/home/doggo/firefox_css/userChrome.css new file mode 100644 index 0000000..85211ba --- /dev/null +++ b/home/doggo/firefox_css/userChrome.css @@ -0,0 +1,70 @@ +:root { + --bg: #00000066; + --tabpanel-background-color: #00000000 !important; + --in-content-page-background: #00000000 !important; + --in-content-box-background: #00000088 !important; + --tabs-navbar-separator-color: rgba(0, 0, 0, 0) !important; + --toolbar-field-focus-background-color: transparent !important; +} + +tab.tabbrowser-tab[selected="true"] stack.tab-stack vbox.tab-background { + background: #FFFFFF28 !important; +} + +toolbar { + background: transparent !important; +} + +/* window transparencies */ +#main-window > body { /* remove '> body' for firefox 140 */ + background: var(--bg) !important; +} + +/* navbar / tabbar / titlebar */ +#nav-bar { + background: transparent !important; +} +#navigator-toolbox { + background: transparent !important; +} + +hbox#urlbar[open="true"] hbox#urlbar-background { + background: #0000000e !important; +} + +#browser:not(.browser-toolbox-background) { + background-color: transparent !important; +} + +#navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(:-moz-lwtheme) { + margin-bottom: -1px !important; +} + +/* Black line */ +#navigator-toolbox { + border-bottom: none !important; +} + + +#urlbar-background { + background: #FFFFFF28 !important; +} + +#urlbar[open] { + background-color: transparent !important; +} + +#searchbar:focus-within{ + background: transparent !important; +} + +/* Removes the ugly shit in top right corner */ +.titlebar-buttonbox-container { + display:none +} + +#alltabs-button { + display: none !important; +} + +.browserContainer {background: transparent !important;} diff --git a/home/doggo/firefox_css/userContent.css b/home/doggo/firefox_css/userContent.css new file mode 100644 index 0000000..9564a16 --- /dev/null +++ b/home/doggo/firefox_css/userContent.css @@ -0,0 +1 @@ + @-moz-document url(about:newtab), url("about:home") { html{ --newtab-background-color: transparent !important; --newtab-background-color-secondary: transparent !important; } } diff --git a/home/doggo/hyprland-config.nix b/home/doggo/hyprland-config.nix new file mode 100644 index 0000000..91a5ab7 --- /dev/null +++ b/home/doggo/hyprland-config.nix @@ -0,0 +1,290 @@ +{ config, pkgs, lib, isLaptop, ... }: + +let + menu_name = "rofi"; + menu = "${menu_name} -show drun -run-command 'app2unit -- {cmd}'"; + uwsm = "uwsm app --"; + terminal = "kitty"; + fileManager = "dolphin"; + mpv_options = "volume=0"; + mainMod = "SUPER"; + + mocha = { + peach = "rgb(fab387)"; + }; +in +{ + wayland.windowManager.hyprland = { + enable = true; + systemd = { + enable = false; # Conflicts with UWSM + }; + + settings = { + monitor = if !isLaptop then [ + { output = "DP-3"; mode = "2560x1440@144"; position = "0x0"; scale = 1; vrr = 2; } + { output = "HDMI-A-4"; mode = "1920x1080@77"; position = "-1920x128"; scale = 1; } + ] else [ + { + output = "eDP-1"; mode = "2880x1800@120"; position = "0x0"; scale = 1.5; + cm = "hdredid"; bitdepth = 10; + min_luminance = 0.0; max_luminance = 2000; + sdr_min_luminance = 0.005; sdr_max_luminance = 350; # 106? + sdrsaturation = 1.0; # 1.175? 0.975? + #sdrbrightness = 1.1; # 1.2625? 0.975? + } + ]; + + # AUTOSTART # + on = { + _args = [ + "hyprland.start" + (lib.generators.mkLuaInline '' + function() + ${if isLaptop then "-- " else ""}hl.exec_cmd("${uwsm} murale '/disk2/MemoryRebootHatsune&Shrek.avi' -o HDMI-A-4 --mpv-options '${mpv_options}'") + hl.exec_cmd("${uwsm} swaybg ${ + if isLaptop then "-c 000000 -o '*'" else "-i '${./backgrounds/ubuntu_budgie_wallpaper1.jpg}' -o DP-3" + }") + hl.exec_cmd("${uwsm} ironbar") + hl.exec_cmd("${uwsm} wl-paste --type text --watch cliphist store") + hl.exec_cmd("${uwsm} wl-paste --type image --watch cliphist store") + hl.exec_cmd("${uwsm} hyprsunset") + hl.exec_cmd("bash -c 'sleep 1.5s && { [ \"$(date +%H)\" -ge 22 ] || [ \"$(date +%H)\" -lt 6 ]; } && hyprctl hyprsunset temperature 3333'") + hl.exec_cmd("systemctl --user start hyprpolkitagent") + end + '') + ]; + }; +/* + # ENVIRONMENT VARIABLES # + env = [ + [ "XCURSOR_SIZE" "24" ] + [ "HYPRCURSOR_SIZE "24" ] + [ "AQ_DRM_DEVICES" "/dev/dri/card1" ] + [ "QT_QPA_PLATFORM "wayland" ] + [ "QT_AUTO_SCREEN_SCALE_FACTOR "1" ] + ]; +*/ + # LOOK & FEEL # + config = { + general = { + gaps_in = 5; + gaps_out = 20; + border_size = 3; + + col.active_border = { + colors = [ + "rgba(33ccffee)" + mocha.peach + "rgba(00ff99ee)" + ]; + angle = 45; + }; + col.inactive_border = { colors = [ "rgba(171727b0)" ]; }; + resize_on_border = false; + allow_tearing = true; + layout = "dwindle"; + }; + + render = { + direct_scanout = 1; + new_render_scheduling = true; + }; + + cursor = { + no_hardware_cursors = 2; + no_break_fs_vrr = 2; + min_refresh_rate = 48; + }; + + decoration = { + rounding = 10; + rounding_power = 2; + + active_opacity = 1.0; + inactive_opacity = 1.0; + + shadow = { + enabled = true; + range = 4; + render_power = 3; + color = "rgba(1a1a1aee)"; + }; + + blur = { + enabled = true; + size = 5; + passes = 4; + new_optimizations = true; + vibrancy = 0.75; + vibrancy_darkness = 1.0; + }; + }; + + animations = { + enabled = true; + workspace_wraparound = true; + }; + + dwindle = { + preserve_split = true; + }; + + master = { + new_status = "master"; + }; + + # INPUT # + input = { + kb_layout = "fr"; + follow_mouse = 1; + focus_on_close = 1; + sensitivity = 0; + + touchpad = { + natural_scroll = false; + }; + }; + + misc = { + force_default_wallpaper = 1; + disable_hyprland_logo = false; + }; + }; + + curve = [ + { _args = ["easeOutQuint" { type = "bezier"; points = [ [0.23 1] [0.32 1] ]; } ]; } + { _args = ["easeInOutCubic" { type = "bezier"; points = [ [0.65 0.05] [0.36 1] ]; } ]; } + { _args = ["linear" { type = "bezier"; points = [ [0 0] [1 1] ]; } ]; } + { _args = ["almostLinear" { type = "bezier"; points = [ [0.5 0.5] [0.75 1] ]; } ]; } + { _args = ["quick" { type = "bezier"; points = [ [0.15 0] [0.1 1] ]; } ]; } + { _args = ["easy" { type = "spring"; mass = 1; stiffness = 71.2633; dampening = 15.8273644; } ]; } + ]; + + animation = [ + { leaf = "global"; enabled = true; speed = 10; bezier = "default"; } + { leaf = "border"; enabled = true; speed = 5.39; bezier = "easeOutQuint"; } + { leaf = "windows"; enabled = true; speed = 4.79; spring = "easy"; } + { leaf = "windowsIn"; enabled = true; speed = 4.1; spring = "easy"; style = "popin 87%"; } + { leaf = "windowsOut"; enabled = true; speed = 1.49; bezier = "linear"; style = "popin 87%"; } + { leaf = "fadeIn"; enabled = true; speed = 1.73; bezier = "almostLinear"; } + { leaf = "fadeOut"; enabled = true; speed = 1.46; bezier = "almostLinear"; } + { leaf = "fade"; enabled = true; speed = 3.03; bezier = "quick"; } + { leaf = "layers"; enabled = true; speed = 3.81; bezier = "easeOutQuint"; } + { leaf = "layersIn"; enabled = true; speed = 4; bezier = "easeOutQuint"; style = "fade"; } + { leaf = "layersOut"; enabled = true; speed = 1.5; bezier = "linear"; style = "fade"; } + { leaf = "fadeLayersIn"; enabled = true; speed = 1.79; bezier = "almostLinear"; } + { leaf = "fadeLayersOut"; enabled = true; speed = 1.39; bezier = "almostLinear"; } + { leaf = "workspaces"; enabled = true; speed = 1.94; bezier = "almostLinear"; style = "fade"; } + { leaf = "workspacesIn"; enabled = true; speed = 1.21; bezier = "almostLinear"; style = "fade"; } + { leaf = "workspacesOut"; enabled = true; speed = 1.94; bezier = "almostLinear"; style = "fade"; } + # Animated border + { leaf = "borderangle"; enabled = true; speed= 20.0; bezier = "linear"; style = "loop"; } + ]; + + gesture = { + fingers = 2; + direction = "right"; + action = "workspace"; + }; + + device = { + name = "epic-mouse-v1"; + sensitivity = -0.5; + }; + + # KEYBINDINGS # + bind = [ + { _args = [ "${mainMod} + A" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"${terminal}\")") ]; } + { _args = [ "${mainMod} + C" (lib.generators.mkLuaInline "hl.dsp.window.close()") { locked = true; } ]; } + { _args = [ "${mainMod} + E" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"${fileManager}\")") ]; } + { _args = [ "${mainMod} + V" (lib.generators.mkLuaInline "hl.dsp.window.float({ action = \"toggle\"})") ]; } + { _args = [ "${mainMod} + P" (lib.generators.mkLuaInline "hl.dsp.window.pseudo()") ]; } + { _args = [ "${mainMod} + J" (lib.generators.mkLuaInline "hl.dsp.layout(\"togglesplit\")") ]; } + { _args = [ "${mainMod} + F" (lib.generators.mkLuaInline "hl.dsp.window.fullscreen({ mode = 0, action = \"toggle\" })") ]; } + + { _args = [ "${mainMod} + left" (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"left\" })") ]; } + { _args = [ "${mainMod} + right" (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"right\" })") ]; } + { _args = [ "${mainMod} + up" (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"up\" })") ]; } + { _args = [ "${mainMod} + down" (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"down\" })") ]; } + + { _args = [ "${mainMod} + S" (lib.generators.mkLuaInline "hl.dsp.workspace.toggle_special(\"magic\")") ]; } + { _args = [ "${mainMod} + SHIFT + S" (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = \"special:magic\" })") ]; } + + { _args = [ "${mainMod} + mouse_down" (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e+1\" })") ]; } + { _args = [ "${mainMod} + mouse_up" (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e-1\" })") ]; } + + { _args = [ "${mainMod} + SUPER_L" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"pkill ${menu_name} || ${menu}\")") ]; } + { _args = [ "${mainMod} + W" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"cliphist list | rofi -dmenu | cliphist decode | wl-copy\")") ]; } + { _args = [ "CTRL + ALT + A" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"pkill ${menu_name} || ${uwsm} ani-cli --${menu_name}\")") { long_press = true; } ]; } + + { _args = [ "${mainMod} + mouse:272" (lib.generators.mkLuaInline "hl.dsp.window.drag()") { mouse = true; } ]; } + { _args = [ "${mainMod} + mouse:273" (lib.generators.mkLuaInline "hl.dsp.window.resize()") { mouse = true; } ]; } + + { _args = [ "XF86AudioRaiseVolume" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+\")") { locked = true; repeating = true; } ]; } + { _args = [ "XF86AudioLowerVolume" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")") { locked = true; repeating = true; } ]; } + { _args = [ "XF86AudioMute" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")") { locked = true; repeating = true; } ]; } + { _args = [ "XF86AudioMicMute" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")") { locked = true; repeating = true; } ]; } + { _args = [ "XF86MonBrightnessUp" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"hyprctl hyprsunset gamma +5\")") { locked = true; repeating = true; } ]; } + { _args = [ "XF86MonBrightnessDown" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"hyprctl hyprsunset gamma -5\")") { locked = true; repeating = true; } ]; } + + { _args = [ "XF86AudioNext" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"playerctl next\")") { locked = true; } ]; } + { _args = [ "XF86AudioPause" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"playerctl play-pause\")") { locked = true; } ]; } + { _args = [ "XF86AudioPlay" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"playerctl play-pause\")") { locked = true; } ]; } + { _args = [ "XF86AudioPrev" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"playerctl previous\")") { locked = true; } ]; } + + { _args = [ "${mainMod} + PRINT" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"hyprshot -m window\")") ]; } + { _args = [ "PRINT" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"hyprshot -m output\")") { locked = true; } ]; } + { _args = [ "SHIFT + PRINT" (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"hyprshot -m region\")") ]; } + + /* + { _args = ["${mainMod} + 1" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 2" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 3" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 4" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 5" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 6" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 7" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 8" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 9" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + 0" (lib.generators.mkLuaInline ) ]; } + + { _args = ["${mainMod} + SHIFT + 1" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 2" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 3" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 4" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 5" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 6" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 7" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 8" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 9" (lib.generators.mkLuaInline ) ]; } + { _args = ["${mainMod} + SHIFT + 0" (lib.generators.mkLuaInline ) ]; } + */ + ]; /* ++ ( + builtins.concatLists (builtins.genList (i: + in [ + { _args = ["${mainMod} + ${toString i}" (lib.generators.mkLuaInline ) "hl.dsp.focus({ workspace = ${toString i} })"]; } + { _args = ["${mainMod} + SHIFT + ${toString i}" (lib.generators.mkLuaInline ) "hl.dsp.window.move({ workspace = ${toString i} })"]; } + ] + ) + 9) + ); */ + + # WINDOW RULES # + window_rule = [ + { name = "suppress-maximize-events"; match = { class = ".*"; }; } + { + name = "fix-xwayland-drags"; + match = { + class = "^$"; + title = "^$"; + xwayland = true; + float = true; + fullscreen = false; + pin = false; + }; + } + ]; + }; + }; +} diff --git a/home/doggo/ironbar-config.nix b/home/doggo/ironbar-config.nix new file mode 100644 index 0000000..99fd2d6 --- /dev/null +++ b/home/doggo/ironbar-config.nix @@ -0,0 +1,517 @@ +{ isLaptop, ... }: + +let + laptop_power = +'' + { + type = "upower" + format = "{percentage}%" + } +''; +in +{ + home.file.".config/ironbar/config.corn".text = '' +let { + $uwsm = "app2unit -- {app_name}" +} in { + monitors.${if isLaptop then "eDP-1" else "DP-3"} = { + position = "bottom" + height = 32 + start = [ + { + type = "menu" + label_icon = "distributor-logo-nixos" + label = "" + label_icon_size = 44 + width = 512 + launch_command = $uwsm + } + { + type = "launcher" + favorites = [ "firefox" "Dolphin" "kitty" "prismlauncher" "Sober" ] + show_names = false + show_icons = true + reversed = false + launch_command = $uwsm + } + { + type = "focused" + show_icon = false + show_title = true + icon_size = 24 + + truncate.mode = "end" + truncate.max_length = 25 + } + ] + center = [ + { type = "music" } + { + type = "clock" justify = "left" + format = " %H:%M:%S\n%d/%m/%Y" + format_popup = "Calendrier" + } + { + type = "sys_info" + interval.cpu = 1 + format = [ " {cpu_percent@mean}% {cpu_frequency@max#M} MHz " ] + } + { type = "volume" } + ] + end = [ + ${if isLaptop then laptop_power else ""} + //{ type = "network_manager" icon_size = 32 } + { type = "tray" icon_size = 32 } + ] + } + icon_theme = "Papirus-Dark" +} +''; + + home.file.".config/ironbar/style.css".text = '' +.container { + font-family: MesloLGSDZ Nerd Font; + /* font-family: CaskaydiaCove Nerd Font; */ + /* font-weight: bold; */ + font-size: 18px; +} + +.cava { + padding: 0px 20px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + color: #7dcfff; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.background { + background-color: rgba(0, 0, 0, 0); +} + +.wlogout { + padding: 0px 15px 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + color: #ff757f; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.wlogout:hover { + color: #7dcfff; + background: #1a1b26; + border-radius: 10px; + min-width: 30px; + transition: all 0.3s ease-in-out; + opacity: 0.8; +} +.airpod { + padding: 0px 15px 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + color: #ff757f; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.airpod:hover { + color: #7dcfff; + background: #1a1b26; + border-radius: 10px; + min-width: 30px; + transition: all 0.3s ease-in-out; + opacity: 0.8; +} +/* cpu */ +.sysinfo .item:nth-child(1) { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 0px; + border-radius: 10px; + color: #ff9e64; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +/* memory */ +.sysinfo .item:nth-child(2) { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 0px; + border-radius: 10px; + color: #7dcfff; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +/* temp */ +.sysinfo .item:nth-child(3) { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 0px; + border-radius: 10px; + color: #bb9af7; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +/* disk */ +.sysinfo .item:nth-child(4) { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 10px; + border-radius: 10px; + color: #9ece6a; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.pacman { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 10px; + border-radius: 10px; + color: #c3e88d; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.zellij { + padding: 0px 7px 0px 9px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + color: #c3e88d; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.zellij:hover { + color: #7dcfff; + background: #1a1b26; + border-radius: 10px; + min-width: 30px; + transition: all 0.3s ease-in-out; + opacity: 0.8; +} +.volume { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 10px; + border-radius: 10px; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; + color: #9abdf5; + background: #1a1b26; + opacity: 0.8; +} + +.popup-volume { + padding: 20px 20px 20px 20px; + border-radius: 5px; + color: #c0caf5; + /* background: #1a1b26; */ + background-color: rgba(26, 27, 38, 0.8); + border: 2px solid #bb9af7; +} + +.weather, +.kbdd { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + color: #ff9e64; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.clock { + font-family: CaskaydiaCove Nerd Font; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 10px; + margin-left: 10px; + padding-right: 10px; + padding-left: 10px; + padding-bottom: 3px; + border-radius: 10px; + color: #7dcfff; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.clock_date { + color: rgb(94, 129, 172); +} + +.popup-clock { + font-weight: bolder; + background-color: rgba(26, 27, 38, 0.8); + border-radius: 10px; + border: 2px solid #bb9af7; +} + +.popup-clock .calendar-clock { + color: #c0caf5; + /* font-size: 2.5em; */ + padding-bottom: 0.1em; +} + +.popup-clock .calendar { + background-color: rgba(26, 27, 38, 0.8); + color: #c0caf5; + border-radius: 10px; +} + +.popup-clock .calendar .header { + padding-top: 1em; + border-top: 1px solid #424242; + font-size: 1.5em; +} + +.popup-clock .calendar:selected { + background-color: #3d59a1; +} + +.launcher .item { + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + margin-left: 8px; +} + +.focused { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + margin-left: 8px; + border-radius: 10px; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; + color: #c3e88d; + background: #1a1b26; + opacity: 0.8; + /* top right bottom left */ +} + +.clipboard { + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + border-radius: 10px; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; + color: #9abdf5; + background: #1a1b26; + opacity: 0.8; +} + +.popup-clipboard { + margin-left: 5px; + padding: 10px 10px 10px 10px; + border-radius: 5px; + color: #c0caf5; + background: #1a1b26; + background-color: rgba(26, 27, 38, 0.8); + border: 2px solid #bb9af7; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.work1, +.work2, +.work3, +.work4, +.work5, +.work6, +.work7, +.work8, +.work9 { + padding: 0px 5px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 3px; + border-radius: 10px; + color: #ff9e64; + opacity: 0.8; + background: #1a1b26; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.work2 { + padding: 0px 10px 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 3px; + border-radius: 10px; + color: #c3e88d; + opacity: 0.8; + background: #1a1b26; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.work1:hover, +.work2:hover, +.work3:hover, +.work4:hover, +.work5:hover, +.work6:hover, +.work7:hover, +.work8:hover, +.work9:hover { + color: #c3e88d; + background: #1a1b26; + border-radius: 10px; + min-width: 40px; + transition: all 0.3s ease-in-out; + opacity: 0.8; +} + +.script { + padding: 0px 10px 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 8px; + margin-left: 8px; + border-radius: 10px; + color: #9abdf5; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.script:hover { + color: #7dcfff; + background: #1a1b26; + border-radius: 10px; + min-width: 30px; + transition: all 0.3s ease-in-out; + opacity: 0.8; +} + +.zscroll { + border-radius: 10px; + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 7px; + margin-left: 10px; + color: #bb9af7; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.music { + border-radius: 10px; + padding: 0px 10px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 7px; + margin-left: 10px; + color: #bb9af7; + background: #1a1b26; + opacity: 0.8; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} +.popup-music { + margin-left: 5px; + padding: 10px 10px 10px 10px; + border-radius: 5px; + color: #c0caf5; + background: #1a1b26; + background-color: rgba(26, 27, 38, 0.8); + border: 2px solid #bb9af7; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.popup-music.volume { +} +.popup-music .volume .slider { + padding: 2px 2px 2px 2px; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 5px; + margin-left: 5px; +} +.popup-music .volume .icon { +} + +tooltip.background { + background-color: rgba(00, 00, 00, 0.5); + font-size: 18px; + border-radius: 10px; + color: #fdfdfd; +} + +tooltip * { + padding: 4px; + background-color: transparent; + color: white; +} + +.host tooltip { + background-color: rgba(255, 00, 00, 0.5); +} + +.workspaces { + background: #1a1b26; + padding: 5px 5px; + margin-top: 5px; + margin-bottom: 15px; + margin-right: 10px; + margin-left: 10px; + border-radius: 10px; + font-weight: bold; + font-style: normal; + opacity: 0.8; + font-size: 16px; + color: #ffffff; + box-shadow: rgba(0, 0, 0, 0.288) 2px 2px 5px 2px; +} + +.workspaces button { + padding: 1px 1px; + margin: 0px 1px; + border-radius: 19px; + border: 0px; + color: #c0caf5; + background-color: #3b4261; + transition: all 0.3s ease-in-out; + opacity: 0.7; +} + +.workspaces .item.focused { + color: #ffffff; + background: #545c7e; + border-radius: 19px; + min-width: 50px; + transition: all 0.3s ease-in-out; + opacity: 1; +} + +.workspaces button:hover { + color: #ffffff; + background: #545c7e; + border-radius: 15px; + min-width: 50px; + opacity: 0.7; +} +''; +} diff --git a/home/doggo/kitty-config.nix b/home/doggo/kitty-config.nix new file mode 100644 index 0000000..b554b6b --- /dev/null +++ b/home/doggo/kitty-config.nix @@ -0,0 +1,29 @@ +{ +home.file.".config/kitty/kitty.conf".text = '' +font_family Fira Code Regular +bold_font auto +italic_font auto +bold_italic_font auto + +cursor_shape beam +disable_ligatures cursor + +font_size 12 + +scrollback_lines 4096 +enable_audio_bell no +copy_on_select clipboard +strip_trailing_spaces smart + +sync_to_monitor no +background_opacity 0.75 +initial_window_width 576 +initial_window_height 512 + +remember_window_size no +window_padding_width 6 +placement_strategy center +hide_window_decorations yes +shell_integration enabled +''; +} diff --git a/home/doggo/mpv-config.nix b/home/doggo/mpv-config.nix new file mode 100644 index 0000000..17bc17c --- /dev/null +++ b/home/doggo/mpv-config.nix @@ -0,0 +1,48 @@ +{ config, pkgs, nixtamal, ... }: + +let + shaders = "${pkgs.anime4k}"; +in +{ + programs.mpv = { + enable = true; + + config = { + glsl-shaders = "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Restore_CNN_VL.glsl:${shaders}/Anime4K_Upscale_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; + vo = "gpu-next"; + gpu-context = "waylandvk"; + gpu-api = "vulkan"; + hwdec = "vulkan"; + deband = "yes"; + + # Stuff needed for ModernZ + watch-later-options-remove = "sub-pos"; + }; + + package = ( + pkgs.mpv.override { + mpv-unwrapped = (pkgs.mpv-unwrapped.override { + ffmpeg = pkgs.ffmpeg-full; + }).overrideAttrs (oldAttrs: { + src = nixtamal.mpv; + }); + + scripts = with pkgs.mpvScripts; [ + modernz + ]; + } + ); + }; + + xdg.configFile."mpv/input.conf".text = '' + # Optimized shaders for higher-end GPU: + CTRL+& no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Restore_CNN_VL.glsl:${shaders}/Anime4K_Upscale_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)" + CTRL+é no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Restore_CNN_Soft_VL.glsl:${shaders}/Anime4K_Upscale_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)" + CTRL+" no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)" + CTRL+' no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Restore_CNN_VL.glsl:${shaders}/Anime4K_Upscale_CNN_x2_VL.glsl:${shaders}/Anime4K_Restore_CNN_M.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)" + CTRL+( no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Restore_CNN_Soft_VL.glsl:${shaders}/Anime4K_Upscale_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Restore_CNN_Soft_M.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)" + CTRL+- no-osd change-list glsl-shaders set "${shaders}/Anime4K_Clamp_Highlights.glsl:${shaders}/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:${shaders}/Anime4K_AutoDownscalePre_x2.glsl:${shaders}/Anime4K_AutoDownscalePre_x4.glsl:${shaders}/Anime4K_Restore_CNN_M.glsl:${shaders}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)" + CTRL+à no-osd change-list glsl-shaders clr ""; vf clr ""; show-text "GLSL shaders / vapoursynth cleared" + # CTRL+k no-osd change-list vf set "vapoursynth=${config.xdg.dataHome}/mpv_x2.py"; show-text "Vapoursynth: x2 FPS (720p downscale)" + ''; +} diff --git a/home/doggo/rofi-config.nix b/home/doggo/rofi-config.nix new file mode 100644 index 0000000..076959f --- /dev/null +++ b/home/doggo/rofi-config.nix @@ -0,0 +1,23 @@ +{ + home.file.".config/rofi/config.rasi".text = '' +@import "catppuccin-mocha" +@import "catppuccin-default" + +configuration { + modes: "run,ssh,drun"; + font: "mono 12"; + show-icons: true; + icon-theme: "Papirus Dark"; + + location: 0; + yoffset: 0; + xoffset: 0; + fixed-num-lines: true; + + ml-row-down: "ScrollDown"; + me-select-entry: "MousePrimary"; + me-accept-entry: "MouseDPrimary"; + me-accept-custom: "Control+MouseDPrimary"; +} +''; +} diff --git a/local.nix b/local.nix new file mode 100644 index 0000000..54d9652 --- /dev/null +++ b/local.nix @@ -0,0 +1,61 @@ +{ config, lib, pkgs, ...}: + +let + isLaptop = false; +in +{ + _module.args.isLaptop = isLaptop; + home-manager.extraSpecialArgs = { inherit isLaptop; }; + + boot.extraModulePackages = with config.boot.kernelPackages; [ + # Common modules + ] ++ (if !isLaptop then [ + # Desktop modules + nct6687d + ] else [ + # Laptop modules + ]); + + boot.kernelModules = [ + # Common modules + ] ++ (if !isLaptop then [ + # Desktop modules + "nct6687" # d disappears in actual module name + ] else [ + # Laptop modules + ]); + + # CRU screen overclocking + hardware.firmware = lib.mkIf (!isLaptop) [ + (pkgs.runCommandLocal "PHL-edid-77hz" {} '' + mkdir -p $out/lib/firmware/edid + cp ${/disk2/Bunker/CRU/PHL_243V5_OC_77MHZ.bin} $out/lib/firmware/edid/PHL_243V5_OC_77MHZ.bin + '') + ]; + + boot.kernelParams = lib.mkIf (!isLaptop) [ + "drm.edid_firmware=HDMI-A-4:edid/PHL_243V5_OC_77MHZ.bin" + ]; + + programs.coolercontrol.enable = !isLaptop; + + boot.loader.limine.extraEntries = lib.mkIf (!isLaptop) '' + /Windows + protocol: efi + path: uuid(F19E62C8-6ED1-4482-976A-6CCF5F561FDD):/EFI/Microsoft/Boot/bootmgfw.efi + ''; + + powerManagement.cpuFreqGovernor = if !isLaptop then "performance" else "schedutil"; + + services.auto-cpufreq = { + enable = isLaptop; + settings = { + charger.turbo = "auto"; + battery.turbo = "never"; + }; + }; + + fileSystems."/".options = [ "noatime" ]; + + networking.hostName = if !isLaptop then "lizard" else "lizard-portable"; +} diff --git a/local_packages/murale/package.nix b/local_packages/murale/package.nix new file mode 100644 index 0000000..5c46336 --- /dev/null +++ b/local_packages/murale/package.nix @@ -0,0 +1,47 @@ +{ + lib, + fetchFromGitHub, + rustPlatform, + pkg-config, + mpv, + wayland, + libxkbcommon, + libglvnd, +}: + +rustPlatform.buildRustPackage { + pname = "murale"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "brenton-keller"; + repo = "murale"; + rev = "8461aace00fbda96fbf3e988b314e9dbef1e1a4d"; # There are no tags yet as of writing + hash = "sha256-UUHIboFU4aES1zQ2RwuG4dIFSiVpyhy3+WVgbbCEteo="; + }; + + cargoHash = "sha256-+jlkV+umcbHpPYbwdx0qrzuMkxA7RkSQ2BoYy0xEkck="; + + strictDeps = true; + __structuredAttrs = true; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + mpv + wayland + libxkbcommon + libglvnd + ]; + + meta = { + description = "Lean, memory-safe video wallpaper player for Wayland compositors "; + homepage = "https://github.com/brenton-keller/murale"; + license = lib.licenses.mit; + platforms = lib.platforms.linux; + mainProgram = "murale"; + maintainers = with lib.maintainers; [ Username404-59 ]; + }; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 0000000..fe4b625 --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: + +{ + fonts.packages = with pkgs; [ + noto-fonts + noto-fonts-cjk-sans + noto-fonts-color-emoji + liberation_ttf + fira-code + fira-code-symbols + nerd-fonts.jetbrains-mono + font-awesome + ]; +} diff --git a/modules/hyprland.nix b/modules/hyprland.nix new file mode 100644 index 0000000..fdd61a3 --- /dev/null +++ b/modules/hyprland.nix @@ -0,0 +1,46 @@ +{ pkgs, ... }: + +{ + programs.hyprland = { + enable = true; + withUWSM = true; + xwayland.enable = true; + }; + services.displayManager.sddm.wayland.enable = true; + services.displayManager.sddm.enable = true; + qt.enable = true; + + environment.systemPackages = with pkgs; [ + uwsm + app2unit + rofi + murale + awww + cliphist + wl-clipboard + hyprshot + nwg-look + hyprsunset + hyprpolkitagent + pwvucontrol + playerctl + ironbar + swaybg + libsForQt5.qtstyleplugin-kvantum + libsForQt5.qt5ct + papirus-icon-theme + (magnetic-catppuccin-gtk.override { + accent = [ "all" ]; + size = "standard"; #"compact" + shade = "dark"; + tweaks = [ /*black*/ ]; + }) + xeyes + networkmanagerapplet + ]; + + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-hyprland ]; + }; +} diff --git a/modules/kernel.nix b/modules/kernel.nix new file mode 100644 index 0000000..cbd269b --- /dev/null +++ b/modules/kernel.nix @@ -0,0 +1,57 @@ +{ config, pkgs, isLaptop, ... }: + +{ + boot.kernelParams = [ + "sysrq_always_enabled=1" + "mitigations=off" + "plymouth.use-simpledrm" + "zswap.enabled=1" + "zswap.compressor=zstd" + "zswap.zpool=zsmalloc" + "vm.swappiness=30" + "preempt=full" + "split_lock_detect=off" + "cpufreq.default_governor=schedutil" + "amd_pstate=active" + "transparent_hugepage=always" + "iommu=pt" + "amd_iommu=pt" + "amdgpu.ppfeaturemask=0xffffffff" + "amdgpu.exp_hw_support=1" + "i915.enable_guc=3" + "pci=assign-busses,hpbussize=0x33,realloc=on" + "kvm.enable_virt_at_load=0" + "amdgpu.dc=1" + "amdgpu.gpu_recovery=1" + "vfio-pci.disable_vga=1" + ]; + + catppuccin.tty.enable = !isLaptop; + + hardware = { + amdgpu.overdrive = { + enable = true; + ppfeaturemask="0xffffffff"; + }; + + new-lg4ff.enable = true; + }; + + boot.kernelPackages = ( + pkgs.linuxKernel.packagesFor( + pkgs.cachyosKernels.linux-cachyos-rc.override { + bbr3 = true; + cpusched = "bore"; + lto = if isLaptop then "thin" else "full"; + processorOpt = if isLaptop then "zen4" else "x86_64-v3"; + tickrate = if isLaptop then "idle" else "full"; + } + ) + ); + + boot.kernel.sysctl = { + "vm.max_map_count" = 16777216; + "net.ipv4.tcp_congestion_control" = "bbr"; + "net.core.default_qdisc" = "cake_mq"; + }; +} diff --git a/modules/networking.nix b/modules/networking.nix new file mode 100644 index 0000000..c248e21 --- /dev/null +++ b/modules/networking.nix @@ -0,0 +1,48 @@ +{ isLaptop, ... }: + +{ + # Enable networking + networking = { + networkmanager = { + enable = true; + wifi.backend = "iwd"; + }; + + wireless.iwd.settings = { + General = { + AddressRandomization = "once"; + }; + Network = { + EnableIPv6 = true; + }; + Settings = { + AutoConnect = true; + }; + Rank = { + BandModifier2_4GHZ = 1.0; + BandModifier5GHZ = 1.1; + BandModifier6GHZ = 2.0; + }; + }; + + firewall = { + allowedTCPPorts = [ + 57621 # Spotify discovery port + ]; + allowedUDPPorts = [ + 5353 # Spotify discovery port + ]; + }; + + # Configure network proxy if necessary + # proxy.default = "http://user:password@proxy:port/"; + # proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + }; + + hardware.bluetooth = { + enable = isLaptop; + powerOnBoot = false; + }; + + services.blueman.enable = isLaptop; +} diff --git a/modules/system-packages.nix b/modules/system-packages.nix new file mode 100644 index 0000000..b1a5e06 --- /dev/null +++ b/modules/system-packages.nix @@ -0,0 +1,59 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + git + curl + wget + neovim + fastfetch + htop + killall + file + e2fsprogs + cpu-x + lact + steam-run + exfatprogs + nixtamal # Important + android-tools + kdePackages.kleopatra # Needed to add keys easily + nload + graalvmPackages.graalvm-ce # Java + clang gcc mold + cmake + sbctl # For secure boot with Limine + ]; + + programs.steam = { + enable = true; + dedicatedServer.openFirewall = true; + extraCompatPackages = with pkgs; [ + proton-ge-bin + dw-proton-bin # From nix-citizen overlay + ]; + # Note: to make another disk visible to games add + # STEAM_COMPAT_MOUNTS=/disk2 %command% + # to commandline options + }; + + services.flatpak.enable = true; + + services.lact.enable = true; + + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + pinentryPackage = pkgs.pinentry-qt; + }; + + programs.partition-manager.enable = true; + + environment.sessionVariables = rec { + NIXTAMAL_DIRECTORY = "tamal"; + }; + + environment.shellAliases = { + nixtamal = "bash -c 'cd /etc/nixos && nixtamal \"$@\"' --"; + }; +} diff --git a/tamal/default.nix b/tamal/default.nix new file mode 100644 index 0000000..ea8ecb5 --- /dev/null +++ b/tamal/default.nix @@ -0,0 +1,181 @@ +/* +SPDX-FileCopyrightText: 2025–2026 toastal +SPDX-FileCopyrightText: 2026 Nixtamal contributors +SPDX-License-Identifier: ISC + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice & this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED “AS IS” & ISC DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY & +FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + +────────────────────────────────────────────────────────────────────────────── +┏┓╻+╻ ╱┏┳┓┏┓┏┳┓┏┓╻ +┃┃┃┃┗━┓╹┃╹┣┫┃┃┃┣┫┃ This file was generated by Nixtamal. +╹┗┛╹╱ ╹ ╹ ╹╹╹ ╹╹╹┗┛ Do not edit as it will be overwritten. +────────────────────────────────────────────────────────────────────────────── +*/ +{ + system ? builtins.currentSystem, + bootstrap-nixpkgs ? null, + bootstrap-nixpkgs-lock-name ? null, +}: + +let lock = builtins.fromJSON (builtins.readFile ./lock.json); in +assert (lock.v == "1.2.0"); +let + local-patches = { + "adios" = ./patches/adios.patch; + "kservice_fix" = ./patches/kservice_fix.patch; + }; + + hash-token = { + "0" = "sha256"; + "1" = "sha512"; + "2" = "blake3"; + }; + + try-fetch = input-name: fetcher: + let + try-fetch' = failed-urls: url: urls: + let result = builtins.tryEval (fetcher url); in + if result.success then + result.value + else + let failed-urls' = [ url ] ++ failed-urls; in + if builtins.length urls <= 0 then + let fus = builtins.concatStringsSep " " failed-urls'; in + throw "Input 「${input-name}」fetchable @ [ ${fus} ]" + else + try-fetch' failed-urls' (builtins.head urls) (builtins.tail urls); + in + try-fetch' [ ]; + + builtin-fetch-url = {input-name, name, kind, hash}: + try-fetch input-name (url: + builtins.fetchurl ({ + inherit url; + ${hash-token.${builtins.toString hash.al}} = hash.vl; + } + // (if name != null then {inherit name;} else {})) + ) kind.ur kind.ms; + + builtin-fetch-tarball = {input-name, name, kind, hash}: + try-fetch input-name (url: + builtins.fetchTarball ({ + inherit url; + ${hash-token.${builtins.toString hash.al}} = hash.vl; + } + // (if name != null then {inherit name;} else {})) + ) kind.ur kind.ms; + + builtin-to-input = input-name: input: + let + name = input.sn; + hash = input.ha; + k = builtins.head input.kd; + in + if k == 0 then + builtin-fetch-url { + inherit name; + input-name = input-name; + kind = builtins.elemAt input.kd 1; + hash = input.ha; + } + else if k == 1 then + builtin-fetch-tarball { + inherit name; + input-name = input-name; + kind = builtins.elemAt input.kd 1; + hash = input.ha; + } + else + throw "Unsupported input kind “${builtins.toString k}”."; + + nixpkgs' = + if builtins.isNull bootstrap-nixpkgs then + builtin-to-input "nixpkgs-for-nixtamal" ( + if builtins.isString bootstrap-nixpkgs-lock-name then + lock.i.${bootstrap-nixpkgs-lock-name} + else + lock.i.nixpkgs-nixtamal or lock.i.nixpkgs + ) + else + bootstrap-nixpkgs; + + pkgs = import nixpkgs' {inherit system;}; + + inherit (pkgs) lib; + + fetch-url = {input-name, name, kind, hash}: pkgs.fetchurl ({ + url = kind.ur; + hash = hash.vl; + } + // lib.optionalAttrs (name != null) {inherit name;} + // lib.optionalAttrs (builtins.length kind.ms > 0) {urls = kind.ms;}); + + fetch-zip = {input-name, name, kind, hash}: pkgs.fetchzip ({ + url = kind.ur; + hash = hash.vl; + } + // lib.optionalAttrs (name != null) {inherit name;} + // lib.optionalAttrs (builtins.length kind.ms > 0) {urls = kind.ms;}); + + fetch-patch = patch-name: {ur, ha}: + pkgs.fetchpatch2 { + url = ur; + hash = ha.vl; + }; + + to-input = input-name: input: + let + name = input.sn; + hash = input.ha; + k = builtins.head input.kd; + raw-input = + if k == 0 then + let + kind = builtins.elemAt input.kd 1; + fetch_time = kind.ft; + in + if fetch_time == 0 then + fetch-url {inherit input-name name kind hash;} + else if fetch_time == 1 then + builtin-fetch-url {inherit input-name name kind hash;} + else + throw "Unsupported fetch time ${fetch_time}." + else if k == 1 then + let + kind = builtins.elemAt input.kd 1; + fetch_time = kind.ft; + in + if fetch_time == 0 then + fetch-zip {inherit input-name name kind hash;} + else if fetch_time == 1 then + builtin-fetch-tarball {inherit input-name name kind hash;} + else + throw "Unsupported fetch time ${fetch_time}." + else + throw "Unsupported input kind “${builtins.toString k}”."; + in + if builtins.length input.ps == 0 then + raw-input + else + pkgs.applyPatches { + src = raw-input; + name = "${if name != null then name else "src"}-patched"; + patches = map (p: + if local-patches ? "${p}" then + local-patches."${p}" + else + fetch-patch p lock.p."${p}" + ) input.ps; + }; +in +builtins.mapAttrs to-input lock.i diff --git a/tamal/lock.json b/tamal/lock.json new file mode 100644 index 0000000..186f73e --- /dev/null +++ b/tamal/lock.json @@ -0,0 +1,17 @@ +{"v":"1.2.0" +,"i":{ +"nixpkgs":{"sn":"nixpkgs-src","kd":[1,{"ft":0,"ur":"https://github.com/NixOS/nixpkgs/archive/3e41b24abd260e8f71dbe2f5737d24122f972158.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-BSTBNVIizq+HVWhxRQidoUSBhRS3DYrbbW3IOF4ZMqo="},"fv":"3e41b24abd260e8f71dbe2f5737d24122f972158","ps":[]} +,"ani-cli":{"sn":"ani-cli-src","kd":[1,{"ft":0,"ur":"https://github.com/pystardust/ani-cli/archive/b8032b72901721a1ce859ca2816e8e2c914bc616.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-vmoD/YCoSBHABOYyYNxqY5+W4YMSZ5yBoIRA6msHaHA="},"fv":"b8032b72901721a1ce859ca2816e8e2c914bc616","ps":[]} +,"catppuccin":{"sn":"catppuccin-src","kd":[1,{"ft":0,"ur":"https://github.com/catppuccin/nix/archive/8b943da8a0f8628f3446d2517ea39babcfaf27f3.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-Ok/y9/GHp/WOe3zR1DShlSBQMoa9WOM1Fk07HJ98c0o="},"fv":"8b943da8a0f8628f3446d2517ea39babcfaf27f3","ps":[]} +,"catppuccin-godot":{"sn":"catppuccin-godot-src","kd":[0,{"ft":0,"ur":"https://raw.githubusercontent.com/catppuccin/godot/d8b72b679078f0103a5e5c1ef793c1d698a563b1/themes/Catppuccin%20Mocha.tet","ms":[]}],"ha":{"al":2,"vl":"blake3-WVY58qsBKJlGvir08RYlS+RcjdhFvXz+7YHVfEr6tes="},"fv":"d8b72b679078f0103a5e5c1ef793c1d698a563b1","ps":[]} +,"dolphin-overlay":{"sn":"dolphin-overlay-src","kd":[1,{"ft":0,"ur":"https://github.com/rumboon/dolphin-overlay/archive/65dd612c8d72d4cf5cb0eb4d9188ed7a16a042dd.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-PCS3mMGsTYXadc/DDU/EQv2T/0YORMigwUP6NEeOJW4="},"fv":"65dd612c8d72d4cf5cb0eb4d9188ed7a16a042dd","ps":["kservice_fix"]} +,"home-manager":{"sn":"home-manager-src","kd":[1,{"ft":0,"ur":"https://github.com/nix-community/home-manager/archive/d1ccd0721ec599866622665f3651e19e6e2d4c6a.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-5OMdQbr6CYz61i1qGRI6uW/f2cSh0hFjKDdaVcHYq3Y="},"fv":"d1ccd0721ec599866622665f3651e19e6e2d4c6a","ps":[]} +,"mpv":{"sn":"mpv-src","kd":[1,{"ft":0,"ur":"https://github.com/mpv-player/mpv/archive/refs/tags/v0.41.0.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-4u9KCKKEvSoOSO/7oZGIpnuSGcFc2rVmcJfdpFzwc5w="},"fv":"e04638a4b4eac258e679673d2a4171bde3f6c41eacb7e3d860c9a435f07eb9da","ps":["mpv_buffers_fix"]} +,"nix-cachyos-kernel":{"sn":"nix-cachyos-kernel-src","kd":[1,{"ft":0,"ur":"https://github.com/xddxdd/nix-cachyos-kernel/archive/756ed060ca6adcdf3e65371e3725b89c58a1354d.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-Fe0eyieRpR2wg5mSTU+1rWBLuDMbAFlBaq2ZyRLDrLU="},"fv":"756ed060ca6adcdf3e65371e3725b89c58a1354d","ps":[]} +,"nix-cachyos-settings":{"sn":"nix-cachyos-settings-src","kd":[1,{"ft":0,"ur":"https://github.com/Daaboulex/cachyos-settings-nix/archive/b10930df067b3774ea2a1a79a4cc31480d8471ab.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-tz6jBM/WrxbxBnNB2v7P/jW1A066j0a+kMgallqOKtM="},"fv":"b10930df067b3774ea2a1a79a4cc31480d8471ab","ps":["adios"]} +,"nix-citizen":{"sn":"nix-citizen-src","kd":[1,{"ft":0,"ur":"https://github.com/LovingMelody/nix-citizen/archive/44a4711c00680d12e807344ad1488564ceab129f.tar.gz","ms":[]}],"ha":{"al":2,"vl":"blake3-BVV1kdZp1Jpxw84MGiDuY1p7i423LF7pXhHSO8UnQUQ="},"fv":"44a4711c00680d12e807344ad1488564ceab129f","ps":[]} +} +,"p":{ +"mpv_buffers_fix":{"ur":"https://patch-diff.githubusercontent.com/raw/mpv-player/mpv/pull/17303.patch","ha":{"al":2,"vl":"blake3-/y4M5tEZmuhh6q5zvg1lbf/jjdnRulPEoycCBcZm/cQ="}} +} +} \ No newline at end of file diff --git a/tamal/manifest.kdl b/tamal/manifest.kdl new file mode 100644 index 0000000..20f0a1e --- /dev/null +++ b/tamal/manifest.kdl @@ -0,0 +1,110 @@ +version "1.2.0" +default-hash-algorithm BLAKE3 + +patches { + adios "./patches/adios.patch" + kservice_fix "./patches/kservice_fix.patch" + mpv_buffers_fix "https://patch-diff.githubusercontent.com/raw/mpv-player/mpv/pull/17303.patch" // TODO: Remove this and mpv from manifest when mpv 0.42 is released +} + +inputs { + nixpkgs { + archive { + url "https://github.com/NixOS/nixpkgs/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/NixOS/nixpkgs.git" --refs "refs/heads/nixpkgs-unstable" + | cut -f1 + } + } + + home-manager { + archive { + url "https://github.com/nix-community/home-manager/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/nix-community/home-manager.git" --refs "refs/heads/master" + | cut -f1 + } + } + + catppuccin { + archive { + url "https://github.com/catppuccin/nix/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/catppuccin/nix.git" --refs "refs/heads/main" + | cut -f1 + } + } + + nix-cachyos-kernel { + archive { + url "https://github.com/xddxdd/nix-cachyos-kernel/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/xddxdd/nix-cachyos-kernel.git" --refs "refs/heads/release" + | cut -f1 + } + } + + nix-cachyos-settings { + archive { + url "https://github.com/Daaboulex/cachyos-settings-nix/archive/{{fresh_value}}.tar.gz" + } + patches adios + fresh-cmd { + $ git ls-remote --branches "https://github.com/Daaboulex/cachyos-settings-nix.git" --refs "refs/heads/main" + | cut -f1 + } + } + + dolphin-overlay { + archive { + url "https://github.com/rumboon/dolphin-overlay/archive/{{fresh_value}}.tar.gz" + } + patches kservice_fix + fresh-cmd { + $ git ls-remote --branches "https://github.com/rumboon/dolphin-overlay.git" --refs "refs/heads/main" + | cut -f1 + } + } + + nix-citizen { + archive { + url "https://github.com/LovingMelody/nix-citizen/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/LovingMelody/nix-citizen.git" --refs "refs/heads/main" + | cut -f1 + } + } + + // Packages + ani-cli { + archive { + url "https://github.com/pystardust/ani-cli/archive/{{fresh_value}}.tar.gz" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/pystardust/ani-cli.git" --refs "refs/heads/master" + | cut -f1 + } + } + mpv { + archive { + url "https://github.com/mpv-player/mpv/archive/refs/tags/v0.41.0.tar.gz" + } + patches mpv_buffers_fix + } + + // Others + catppuccin-godot { + file { + url "https://raw.githubusercontent.com/catppuccin/godot/{{fresh_value}}/themes/Catppuccin Mocha.tet" + } + fresh-cmd { + $ git ls-remote --branches "https://github.com/catppuccin/godot.git" --refs "refs/heads/main" + | cut -f1 + } + } +} diff --git a/tamal/patches/adios.patch b/tamal/patches/adios.patch new file mode 100644 index 0000000..d9c5bbd --- /dev/null +++ b/tamal/patches/adios.patch @@ -0,0 +1,15 @@ +diff --git a/module.nix b/module.nix +index c78661e..0f03ec3 100644 +--- a/module.nix ++++ b/module.nix +@@ -220,8 +220,8 @@ in + ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" + # SSD: mq-deadline + ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline" +- # NVMe: kyber (upstream CachyOS#220) +- ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="kyber" ++ # NVMe: adios (because I said so) ++ ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="adios" + ''; + }) + diff --git a/tamal/patches/kservice_fix.patch b/tamal/patches/kservice_fix.patch new file mode 100644 index 0000000..c91ac71 --- /dev/null +++ b/tamal/patches/kservice_fix.patch @@ -0,0 +1,15 @@ +diff --git a/default.nix b/default.nix +index 5719e2f..5e90925 100644 +--- a/default.nix ++++ b/default.nix +@@ -18,8 +18,8 @@ final: prev: { + postBuild = '' + rm $out/bin/dolphin + makeWrapper ${kprev.dolphin}/bin/dolphin $out/bin/dolphin \ +- --set XDG_CONFIG_DIRS "${prev.libsForQt5.kservice}/etc/xdg:$XDG_CONFIG_DIRS" \ +- --run "${kprev.kservice}/bin/kbuildsycoca6 --noincremental ${prev.libsForQt5.kservice}/etc/xdg/menus/applications.menu" ++ --set XDG_CONFIG_DIRS "${prev.libsForQt5.__internalKF5.kservice}/etc/xdg:$XDG_CONFIG_DIRS" \ ++ --run "${kprev.kservice}/bin/kbuildsycoca6 --noincremental ${prev.libsForQt5.__internalKF5.kservice}/etc/xdg/menus/applications.menu" + ''; + passthru = (kprev.dolphin.passthru or {}) // { dev = kprev.dolphin.dev; }; + };