From a056205ccff1f2e27042ce022ede6466fb241a9a Mon Sep 17 00:00:00 2001 From: KeksNino Date: Fri, 21 Aug 2026 18:35:03 +0200 Subject: [PATCH] add btrfs stuff and rmpc themes --- .gitignore | 8 - hosts/desktop/configuration.nix | 1 + hosts/desktop/drives.nix | 14 + hosts/desktop/hardware-configuration.nix | 67 +-- modules/home/mpd.nix | 642 +++++++++++++++++++++++ modules/shell.nix | 2 +- 6 files changed, 685 insertions(+), 49 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3cb44c3..0000000 --- a/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# ---> Nix -# Ignore build outputs from performing a nix-build or `nix build` command -result -result-* - -# Ignore automatically generated direnv output -.direnv - diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index d0d0dee..67d1c3f 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -124,6 +124,7 @@ flake = "/home/user/nix-config"; }; + programs.gamemode.enable = true; programs.steam = { enable = true; protontricks.enable = true; diff --git a/hosts/desktop/drives.nix b/hosts/desktop/drives.nix index 5d9b091..c5c1b52 100644 --- a/hosts/desktop/drives.nix +++ b/hosts/desktop/drives.nix @@ -4,11 +4,25 @@ "nfs4" ]; + fileSystems = { + "/".options = [ "compress=zstd" ]; + "/home".options = [ "compress=zstd" ]; + "/nix".options = [ + "compress=zstd" + "noatime" + ]; + }; + fileSystems."/media/music" = { device = "192.168.132.149:/media/music"; fsType = "nfs4"; }; + fileSystems."/media/arch" = { + device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; + fsType = "ext4"; + }; + fileSystems."/media/gamedisk" = { device = "/dev/disk/by-uuid/5C7C14707C1446E4"; fsType = "ntfs-3g"; diff --git a/hosts/desktop/hardware-configuration.nix b/hosts/desktop/hardware-configuration.nix index 2087a6f..392b4f2 100644 --- a/hosts/desktop/hardware-configuration.nix +++ b/hosts/desktop/hardware-configuration.nix @@ -1,56 +1,43 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: +{ config, lib, pkgs, modulesPath, ... }: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ - "xhci_pci" - "ahci" - "usbhid" - "usb_storage" - "sd_mod" - ]; + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = { - device = "/dev/disk/by-uuid/ddabcce9-86a5-4dd8-84f1-3afa99a83752"; - fsType = "ext4"; - }; + fileSystems."/" = + { device = "/dev/disk/by-uuid/c9d2db79-b3a1-4698-bee3-1cc6d8cb7f02"; + fsType = "btrfs"; + options = [ "subvol=root" ]; + }; - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/16F5-2D1A"; - fsType = "vfat"; - options = [ - "fmask=0077" - "dmask=0077" - ]; - }; - fileSystems."/media/music" = { - device = "192.168.132.149:/media/music"; - fsType = "nfs4"; - }; + fileSystems."/home" = + { device = "/dev/disk/by-uuid/c9d2db79-b3a1-4698-bee3-1cc6d8cb7f02"; + fsType = "btrfs"; + options = [ "subvol=home" ]; + }; - fileSystems."/media/arch" = { - device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; - fsType = "ext4"; - }; + fileSystems."/nix" = + { device = "/dev/disk/by-uuid/c9d2db79-b3a1-4698-bee3-1cc6d8cb7f02"; + fsType = "btrfs"; + options = [ "subvol=nix" ]; + }; - swapDevices = [ - { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } - ]; + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/16F5-2D1A"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/modules/home/mpd.nix b/modules/home/mpd.nix index 972006b..1d8418a 100644 --- a/modules/home/mpd.nix +++ b/modules/home/mpd.nix @@ -1,4 +1,7 @@ +{ config, ... }: { + home.file."Music".source = config.lib.file.mkOutOfStoreSymlink "/media/music"; + services.mpd = { enable = true; musicDirectory = "/home/user/Music"; @@ -224,4 +227,643 @@ ], ) ''; + + home.file.".config/rmpc/themes/default.ron".text = '' + #![enable(implicit_some)] + #![enable(unwrap_newtypes)] + #![enable(unwrap_variant_newtypes)] + ( + default_album_art_path: None, + format_tag_separator: " | ", + browser_column_widths: [20, 38, 42], + background_color: None, + text_color: None, + header_background_color: None, + modal_background_color: None, + modal_backdrop: true, + preview_label_style: (fg: "yellow"), + preview_metadata_group_style: (fg: "yellow", modifiers: "Bold"), + highlighted_item_style: (fg: "blue", modifiers: "Bold"), + current_item_style: (fg: "black", bg: "blue", modifiers: "Bold"), + borders_style: (fg: "blue"), + highlight_border_style: (fg: "blue"), + symbols: ( + song: "S", + dir: "D", + playlist: "P", + marker: "M", + ellipsis: "...", + song_style: None, + dir_style: None, + playlist_style: None, + ), + level_styles: ( + info: (fg: "blue", bg: "black"), + warn: (fg: "yellow", bg: "black"), + error: (fg: "red", bg: "black"), + debug: (fg: "light_green", bg: "black"), + trace: (fg: "magenta", bg: "black"), + ), + progress_bar: ( + symbols: ["[", "-", ">", " ", "]"], + track_style: (fg: "#1e2030"), + elapsed_style: (fg: "blue"), + thumb_style: (fg: "blue", bg: "#1e2030"), + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (), + ends_style: (), + thumb_style: (fg: "blue"), + ), + tab_bar: ( + active_style: (fg: "black", bg: "blue", modifiers: "Bold"), + inactive_style: (), + ), + lyrics: ( + timestamp: false + ), + browser_song_format: [ + ( + kind: Group([ + (kind: Property(Track)), + (kind: Text(" ")), + ]) + ), + ( + kind: Group([ + (kind: Property(Artist)), + (kind: Text(" - ")), + (kind: Property(Title)), + ]), + default: (kind: Property(Filename)) + ), + ], + song_table_format: [ + ( + prop: (kind: Property(Artist), + default: (kind: Text("Unknown")) + ), + label_prop: (kind: Text("Artist")), + width: "20%", + ), + ( + prop: (kind: Property(Title), + default: (kind: Text("Unknown")) + ), + label_prop: (kind: Text("Title")), + width: "35%", + ), + ( + prop: (kind: Property(Album), style: (fg: "white"), + default: (kind: Text("Unknown Album"), style: (fg: "white")) + ), + label_prop: (kind: Text("Album")), + width: "30%", + ), + ( + prop: (kind: Property(FileExtension), + default: (kind: Text("-")) + ), + width: "10%", + alignment: Right, + ), + ( + prop: (kind: Property(Duration), + default: (kind: Text("-")) + ), + label_prop: (kind: Text("Duration")), + width: "15%", + alignment: Right, + ), + ], + layout: Split( + direction: Vertical, + panes: [ + ( + size: "3", + pane: Split( + direction: Horizontal, + panes: [ + ( + size: "35", + borders: "", + border_symbols: Inherited(parent: Rounded, bottom_left: "├"), + pane: Component("header_left") + ), + ( + size: "100%", + borders: "", + border_symbols: Inherited(parent: Rounded, top_left: "┬", top_right: "┬", bottom_left: "┴", bottom_right: "┴"), + pane: Component("header_center") + ), + ( + size: "35", + borders: "", + border_symbols: Inherited(parent: Rounded, bottom_right: "┤"), + pane: Component("header_right") + ), + ] + ) + ), + ( + pane: Pane(Tabs), + borders: "", + border_symbols: Rounded, + size: "3", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + size: "3", + pane: Split( + direction: Horizontal, + panes: [ + //( + // size: "12", + // borders: "ALL", + // border_symbols: Inherited(parent: Rounded), + // pane: Component("input_mode") + //), + ( + size: "100%", + // borders: "TOP | BOTTOM | RIGHT", + // border_symbols: Rounded, + border_title: [(kind: Text(" ")), (kind: Property(Status(QueueLength()))), (kind: Text(" songs / ")), (kind: Property(Status(QueueTimeTotal()))), (kind: Text(" total time "))], + border_title_alignment: Right, + pane: Component("progress_bar"), + ), + ] + ), + ), + ], + ), + components: { + "scanstatus": Pane(Property( + content: [ + (kind: Property(Widget(ScanStatus)), style: (fg: "yellow", modifiers: "Bold")), + ], align: Right, + )), + "state": Pane(Property( + content: [ + (kind: Text("["), style: (fg: "yellow", modifiers: "Bold")), + (kind: Property(Status(StateV2( ))), style: (fg: "yellow", modifiers: "Bold")), + (kind: Text("]"), style: (fg: "yellow", modifiers: "Bold")), + ], align: Left, + )), + "title": Pane(Property( + content: [ + (kind: Property(Song(Title)), style: (modifiers: "Bold"), + default: (kind: Text("No Song"), style: (modifiers: "Bold"))), + ], align: Center, scroll_speed: 1 + )), + "volume": Split( + direction: Horizontal, + panes: [ + (size: "1", pane: Pane(Property(content: [(kind: Text(""))]))), + (size: "100%", pane: Pane(Volume(kind: Slider(symbols: (filled: "─", thumb: "●", track: "─"))))), + (size: "3", pane: Pane(Property(content: [(kind: Property(Status(Volume)), style: (fg: "blue"))], align: Right))), + (size: "2", pane: Pane(Property(content: [(kind: Text("%"), style: (fg: "blue"))]))), + ] + ), + "elapsed_and_bitrate": Pane(Property( + content: [ + (kind: Property(Status(Elapsed))), + (kind: Text(" / ")), + (kind: Property(Status(Duration))), + (kind: Group([ + (kind: Text(" (")), + (kind: Property(Status(Bitrate))), + (kind: Text(" kbps)")), + ])), + ], + align: Left, + )), + "artist_and_album": Pane(Property( + content: [ + (kind: Property(Song(Artist)), style: (fg: "yellow", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "yellow", modifiers: "Bold"))), + (kind: Text(" - ")), + (kind: Property(Song(Album)), default: (kind: Text("Unknown Album"))), + ], align: Center, scroll_speed: 1 + )), + "states": Split( + direction: Horizontal, + panes: [ + ( + size: "1", + pane: Pane(Empty()) + ), + ( + size: "100%", + pane: Pane(Property(content: [(kind: Property(Status(InputBuffer())), style: (fg: "blue"), align: Left)])) + ), + ( + size: "6", + pane: Pane(Property(content: [ + (kind: Text("["), style: (fg: "blue", modifiers: "Bold")), + (kind: Property(Status(RepeatV2( + on_label: "z", + off_label: "z", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + )))), + (kind: Property(Status(RandomV2( + on_label: "x", + off_label: "x", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + )))), + (kind: Property(Status(ConsumeV2( + on_label: "c", + off_label: "c", + oneshot_label: "c", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + oneshot_style: (fg: "red", modifiers: "Dim"), + )))), + (kind: Property(Status(SingleV2( + on_label: "v", + off_label: "v", + oneshot_label: "v", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + oneshot_style: (fg: "red", modifiers: "Bold"), + )))), + (kind: Text("]"), style: (fg: "blue", modifiers: "Bold")), + ], + align: Right + )) + ), + ] + ), + "input_mode": Pane(Property( + content: [ + (kind: Transform(Replace(content: (kind: Property(Status(InputMode()))), replacements: [ + (match: "Normal", replace: (kind: Text(" NORMAL "), style: (fg: "black", bg: "blue"))), + (match: "Insert", replace: (kind: Text(" INSERT "), style: (fg: "black", bg: "green"))), + ]))) + ], align: Center + )), + "header_left": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("state")), + (size: "1", pane: Component("elapsed_and_bitrate")), + ] + ), + "header_center": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("title")), + (size: "1", pane: Component("artist_and_album")), + ] + ), + "header_right": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("volume")), + (size: "1", pane: Component("states")), + (size: "1", pane: Component("scanstatus")), + ] + ), + "progress_bar": Split( + direction: Horizontal, + panes: [ + ( + size: "1", + pane: Pane(Empty()) + ), + ( + size: "100%", + pane: Pane(ProgressBar) + ), + ( + size: "1", + pane: Pane(Empty()) + ), + ] + ) + }, + ) + ''; + + home.file.".config/rmpc/themes/default_borders.ron".text = '' + #![enable(implicit_some)] + #![enable(unwrap_newtypes)] + #![enable(unwrap_variant_newtypes)] + ( + default_album_art_path: None, + format_tag_separator: " | ", + browser_column_widths: [20, 38, 42], + background_color: None, + text_color: None, + header_background_color: None, + modal_background_color: None, + modal_backdrop: false, + preview_label_style: (fg: "yellow"), + preview_metadata_group_style: (fg: "yellow", modifiers: "Bold"), + highlighted_item_style: (fg: "blue", modifiers: "Bold"), + current_item_style: (fg: "black", bg: "blue", modifiers: "Bold"), + borders_style: (fg: "blue"), + highlight_border_style: (fg: "blue"), + symbols: ( + song: "S", + dir: "D", + playlist: "P", + marker: "M", + ellipsis: "...", + song_style: None, + dir_style: None, + playlist_style: None, + ), + level_styles: ( + info: (fg: "blue", bg: "black"), + warn: (fg: "yellow", bg: "black"), + error: (fg: "red", bg: "black"), + debug: (fg: "light_green", bg: "black"), + trace: (fg: "magenta", bg: "black"), + ), + progress_bar: ( + symbols: ["[", "-", ">", " ", "]"], + track_style: (fg: "#1e2030"), + elapsed_style: (fg: "blue"), + thumb_style: (fg: "blue", bg: "#1e2030"), + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (), + ends_style: (), + thumb_style: (fg: "blue"), + ), + tab_bar: ( + active_style: (fg: "black", bg: "blue", modifiers: "Bold"), + inactive_style: (), + ), + lyrics: ( + timestamp: false + ), + browser_song_format: [ + ( + kind: Group([ + (kind: Property(Track)), + (kind: Text(" ")), + ]) + ), + ( + kind: Group([ + (kind: Property(Artist)), + (kind: Text(" - ")), + (kind: Property(Title)), + ]), + default: (kind: Property(Filename)) + ), + ], + song_table_format: [ + ( + prop: (kind: Property(Artist), + default: (kind: Text("Unknown")) + ), + label_prop: (kind: Text("Artist")), + width: "20%", + ), + ( + prop: (kind: Property(Title), + default: (kind: Text("Unknown")) + ), + label_prop: (kind: Text("Title")), + width: "35%", + ), + ( + prop: (kind: Property(Album), style: (fg: "white"), + default: (kind: Text("Unknown Album"), style: (fg: "white")) + ), + label_prop: (kind: Text("Album")), + width: "30%", + ), + ( + prop: (kind: Property(FileExtension), + default: (kind: Text("-")) + ), + width: "10%", + alignment: Right, + ), + ( + prop: (kind: Property(Duration), + default: (kind: Text("-")) + ), + label_prop: (kind: Text("Duration")), + width: "15%", + alignment: Right, + ), + ], + layout: Split( + direction: Vertical, + panes: [ + ( + size: "4", + pane: Split( + direction: Horizontal, + panes: [ + ( + size: "35", + borders: "LEFT | TOP | BOTTOM", + border_symbols: Inherited(parent: Rounded, bottom_left: "├"), + pane: Component("header_left") + ), + ( + size: "100%", + borders: "ALL", + border_symbols: Inherited(parent: Rounded, top_left: "┬", top_right: "┬", bottom_left: "┴", bottom_right: "┴"), + pane: Component("header_center") + ), + ( + size: "35", + borders: "RIGHT | TOP | BOTTOM", + border_symbols: Inherited(parent: Rounded, bottom_right: "┤"), + pane: Component("header_right") + ), + ] + ) + ), + ( + pane: Pane(Tabs), + borders: "RIGHT | LEFT | BOTTOM", + border_symbols: Rounded, + size: "2", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + size: "3", + pane: Split( + direction: Horizontal, + panes: [ + //( + // size: "12", + // borders: "ALL", + // border_symbols: Inherited(parent: Rounded), + // pane: Component("input_mode") + //), + ( + size: "100%", + // borders: "TOP | BOTTOM | RIGHT", + // border_symbols: Rounded, + border_title: [(kind: Text(" ")), (kind: Property(Status(QueueLength()))), (kind: Text(" songs / ")), (kind: Property(Status(QueueTimeTotal()))), (kind: Text(" total time "))], + border_title_alignment: Right, + pane: Component("progress_bar"), + ), + ] + ), + ), + ], + ), + components: { + "state": Pane(Property( + content: [ + (kind: Text("["), style: (fg: "yellow", modifiers: "Bold")), + (kind: Property(Status(StateV2( ))), style: (fg: "yellow", modifiers: "Bold")), + (kind: Text("]"), style: (fg: "yellow", modifiers: "Bold")), + ], align: Left, + )), + "title": Pane(Property( + content: [ + (kind: Property(Song(Title)), style: (modifiers: "Bold"), + default: (kind: Text("No Song"), style: (modifiers: "Bold"))), + ], align: Center, scroll_speed: 1 + )), + "volume": Split( + direction: Horizontal, + panes: [ + (size: "1", pane: Pane(Property(content: [(kind: Text(""))]))), + (size: "100%", pane: Pane(Volume(kind: Slider(symbols: (filled: "─", thumb: "●", track: "─"))))), + (size: "3", pane: Pane(Property(content: [(kind: Property(Status(Volume)), style: (fg: "blue"))], align: Right))), + (size: "2", pane: Pane(Property(content: [(kind: Text("%"), style: (fg: "blue"))]))), + ] + ), + "elapsed_and_bitrate": Pane(Property( + content: [ + (kind: Property(Status(Elapsed))), + (kind: Text(" / ")), + (kind: Property(Status(Duration))), + (kind: Group([ + (kind: Text(" (")), + (kind: Property(Status(Bitrate))), + (kind: Text(" kbps)")), + ])), + ], + align: Left, + )), + "artist_and_album": Pane(Property( + content: [ + (kind: Property(Song(Artist)), style: (fg: "yellow", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "yellow", modifiers: "Bold"))), + (kind: Text(" - ")), + (kind: Property(Song(Album)), default: (kind: Text("Unknown Album"))), + ], align: Center, scroll_speed: 1 + )), + "states": Split( + direction: Horizontal, + panes: [ + ( + size: "1", + pane: Pane(Empty()) + ), + ( + size: "100%", + pane: Pane(Property(content: [(kind: Property(Status(InputBuffer())), style: (fg: "blue"), align: Left)])) + ), + ( + size: "6", + pane: Pane(Property(content: [ + (kind: Text("["), style: (fg: "blue", modifiers: "Bold")), + (kind: Property(Status(RepeatV2( + on_label: "z", + off_label: "z", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + )))), + (kind: Property(Status(RandomV2( + on_label: "x", + off_label: "x", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + )))), + (kind: Property(Status(ConsumeV2( + on_label: "c", + off_label: "c", + oneshot_label: "c", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + oneshot_style: (fg: "red", modifiers: "Dim"), + )))), + (kind: Property(Status(SingleV2( + on_label: "v", + off_label: "v", + oneshot_label: "v", + on_style: (fg: "yellow", modifiers: "Bold"), + off_style: (fg: "blue", modifiers: "Dim"), + oneshot_style: (fg: "red", modifiers: "Bold"), + )))), + (kind: Text("]"), style: (fg: "blue", modifiers: "Bold")), + ], + align: Right + )) + ), + ] + ), + "input_mode": Pane(Property( + content: [ + (kind: Transform(Replace(content: (kind: Property(Status(InputMode()))), replacements: [ + (match: "Normal", replace: (kind: Text(" NORMAL "), style: (fg: "black", bg: "blue"))), + (match: "Insert", replace: (kind: Text(" INSERT "), style: (fg: "black", bg: "green"))), + ]))) + ], align: Center + )), + "header_left": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("state")), + (size: "1", pane: Component("elapsed_and_bitrate")), + ] + ), + "header_center": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("title")), + (size: "1", pane: Component("artist_and_album")), + ] + ), + "header_right": Split( + direction: Vertical, + panes: [ + (size: "1", pane: Component("volume")), + (size: "1", pane: Component("states")), + ] + ), + "progress_bar": Split( + direction: Horizontal, + panes: [ + ( + size: "1", + pane: Pane(Empty()) + ), + ( + size: "100%", + pane: Pane(ProgressBar) + ), + ( + size: "1", + pane: Pane(Empty()) + ), + ] + ) + }, + ) + + ''; } diff --git a/modules/shell.nix b/modules/shell.nix index 30a2fae..f52700b 100644 --- a/modules/shell.nix +++ b/modules/shell.nix @@ -14,7 +14,7 @@ ff = "fastfetch"; grep = "grep -i"; rg = "rg -i"; - h = "start-hyprland"; + hyprland = "start-hyprland"; mv = "mv -v"; n = "nvim"; py = "uv run";