diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 81b47aa..6f2994e --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ ISSUES/ secrets/ -nib/ result -rebuild*.log diff --git a/docs/DEVDOC.md b/DEVDOC.md similarity index 100% rename from docs/DEVDOC.md rename to DEVDOC.md diff --git a/DEV_ENV b/DEV_ENV new file mode 100644 index 0000000..bf545ce --- /dev/null +++ b/DEV_ENV @@ -0,0 +1,3 @@ +- [ ] Stop colmena adding inputs for unmanaged nodes +- [ ] Use latest commit for colmena +- [ ] Program colmena to have an option that adds `--no-check-sigs` to `nix copy` diff --git a/GUIDE.md b/GUIDE.md deleted file mode 100644 index 7666492..0000000 --- a/GUIDE.md +++ /dev/null @@ -1,109 +0,0 @@ -# The Nix Documentation Situation -The Nix documentation situation is notorious bad. It's difficult to find -a concise answer with detailed justification/explanation. And most people -(myself included) tend resort to the [ArchWiki](https://wiki.archlinux.org). -> [!NOTE] -> The [Nix documentation team](https://nixos.org/community/teams/documentation) has an incredibly difficult job. - -Unlike the *centralised* [ArchWiki](https://wiki.archlinux.org), the Nix ecosystem -is incredibly large: -1. **Nix** (the package manager) -2. **Nix/NixLang** (the programming language) -3. **Nixpkgs** (the package repository) -4. **NixOS** (the linux distribution) -5. **Home-Manager** (user environment management) -6. **NUR** (Nix User Repository, like the AUR but Nix!) -7. *and **many** more...* - -Often each project has its own website, wiki, styling, etc. There is tonnes -of information available online but its so hard to find it. - -**Notable organisations:** -1. NixOS Foundation (*official organisation that maintains Nix/Nixpkgs/NixOS*) -2. Nix Community (*unofficial community providing infrastructure/hosting/visibility for projects*) - -## About Me -I love and hate Nix simultaneously. - -Originally *(circa 2023)* I used Windows 10/11 exclusively for programming. -But this is tedious and my friend started mentioning Arch Linux. So with their -help I formatted a spare SSD and began my journey. - -But I **REALLY** like computers... I have servers, routers, 3 computers -actively powered in my bedroom, and *I believe* 8 laptops *currently* in my posession. - -Documenting **every** change I make to a system and spending a week -setting up a device I don't really care about isn't sustainable. -And then *(circa October 2024)* I learnt about NixOS... And now life is "easy". -But learning Nix/NixLang/Nixpkgs/NixOS/Home-Manager/blah-blah-blah was exhausting. -So now I'll try to simplify this learning curve for other newbies **<3** - - -## Nix/NixOS How To -### NixOS Documentation -Using "the" NixOS wiki is surprisingly confusing (at least it was for me). -Why? Because there are multiple and you probably won't realise the difference. - -**Main Wikis:** -> These are visually and structurally identical... And are both community run. -> But they're content does differ. [nixos.wiki] was created -> because ""[wiki.nixos.org] was too limiting with regards to wiki features". -1. [https://wiki.nixos.org] (the **official** NixOS wiki) -2. [https://nixos.wiki] (the **unofficial** user's wiki, community run) - - -**Other Resources:** -> [!TODO] - - -### Migrate to a Newer Version of Nixpkgs -```bash -# Determine the channel name you're using -nix-channel --list -nix-channel --remove -nix-channel --add # ie https://nixos.org/channels/nixos-25.05 -nix-channel --update - -# Now upgrade system profile (log to file in case of failure) -nixos-rebuild boot --upgrade | tee rebuild.log -``` - - - -## Security Implications -### NixOS Default Home Permissions -```bash -# Executing from $HOME ->>> mkdir example.d && ls -l example.d --rw-r--r-- 1 me users 1 Jul 25 10:13 example.d ->>> echo > example.f && ls -l example.f --rw-r--r-- 1 me users 1 Jul 25 10:15 example.f - -## But these ignore facl? ->>> getfacl "$HOME" -# file: home/me -# owner: me -# group: users -user::rwx -group::--- -other::--- -``` -Many commands default to permissions that ignore the file access control listl (file ACLs). -This is not a NixOS specific issue. However this isn't ideal from a security perspective. -The simplest solution is a recursive `chmod -R 600 ~` but there are plenty of files we -intentionally want to be different. -> [!TODO] -> Solution: Make a Nix/Home-Manager package allowing for control over folder permissions. -> SOlution: Also it should warn if any files owned by $USER have a 2 - - - -## Further Reading -### Finding New Things to Do -`man 5 configuration.nix` is incredibly useful - similar info can be found at https://mynixos.com/options - -### For your curiosity -1. https://wiki.nixos.org/wiki/Firejail - - diff --git a/docs/inspiration.md b/INSPIRATION similarity index 55% rename from docs/inspiration.md rename to INSPIRATION index fdb73ab..2c5adf0 100755 --- a/docs/inspiration.md +++ b/INSPIRATION @@ -6,7 +6,3 @@ Gorgeous Very nice https://github.com/linuxmobile/hyprland-dots - - -I love their hyprpanel! - https://www.reddit.com/r/unixporn/comments/1ha3mjw/hyprlandnixos_is_the_pretty_ucking_solid_i_love/ diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 36d887e..ce2a13b --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ -## My NixOS Flake ### Philosophy -> [!TODO] My philosophy has kinda changed since the beginning +I try to use Home Manager as little as possible. When I first started with NixOS I found +it distracting and confusing. NixOS already handles system wide and user packages, so having +another user level package management method was baffling. Obviously I understand now how +it can be useful (so I do use it). But where possible I will instead use the functionality +of Nix rather than Home Manager. -### Repo Structure +###### Structuring Modules Modules are organised into groups (ie "Core"), from here a module is structured as either: 1. a single `.nix` file (ie bluetooth.nix). I do this when I won't implement an alternative 2. a directory (ie `sound`) containing a set of alternative implementations and a `default.nix` @@ -10,19 +13,15 @@ that simply imports one of the implementations. For the `sound` example I curren to default to `pipewire.nix`. I haven't made alternatives yet but the idea is that it is HIGHLY likely I do in future. -### Security Considerations -###### Hashing -For services where password hashing is done infrequently (ie my forgejo instance with signups disabled) -use argon2 (argon2id) with default `argon2$2$65536$8$50` (typically). Otherwise bcrypt is preferred. ### TODO -There are a lot of commented `# TODO: ...` items in this repository. -All (most) of my commented directives can be found via this pattern: -```sh -grep -rnE '^\s*(//|#)\s*[A-Z]*:\s*.+$' --exclude-dir=.git 2>/dev/null -``` +There are a lot of `TODO` items in this repository. To improve these dotfiles +I should run a command to find files containing "TODO" and then implement the +recommendation I left behind :) -### Random Explanation of Fonts + + +##### Small Explanation of Fonts There are four types of fonts (to my knowledge at least): 1. serif (funny squigles / small elegant strokes included) 2. sans-serif (meaning "without serifs") @@ -34,9 +33,19 @@ Fun fact: on Android, the emojis you are seeing are part of the noto-emoji font For finding a font for programming I highly recommend trying https://www.codingfont.com/ -### Links -#### Inspiration -##### Explaining my Vision with r/unixporn posts +### My config + +Font: +Iosevka nerd font set as default/prefered font +Terminal uses IosevkaTerm nerd font + +Home-Manager: +I just to use home-manager standalone and not as a NixOS module, thus allowing +my dotfiles to also work on non-NixOS systems. + + + +### Explaining my Vision with r/unixporn posts I want the side panel from https://www.reddit.com/r/unixporn/comments/12wpvyf/hyprland_eww_is_all_i_need/ but not the colour scheme and I'm 50/50 on the bar being on th eleft side lol. Also I love the volume bar on the right! @@ -55,29 +64,22 @@ Their window decorations and bar are great, also being able to hide everything u https://www.reddit.com/r/unixporn/comments/vkcasz/i3gaps_i_prefer_light_mode/ If their colour scheme was a little less white I'd love it but overall one of my favourites every -##### Other Inspiring Shtuff -1. https://github.com/sabrehagen/desktop-environment -#### Wallpaper Sources +### Wallpaper Sources 1. https://www.wallpaperflare.com/ 2. https://alphacoders.com especially this one person: https://alphacoders.com/users/profile/69089/robokoboto and also the lofi category: https://alphacoders.com/lofi -#### Teach Yourself Nix -1. https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles) - Really good security oriented NixOS stuff -2. https://jade.fyi/blog/flakes-arent-real/ - Interesting blog post on using flakes -#### Credits +### Credits 1. https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles - The simplicity of their layout is amazing, was really good to pick out small modules and learn how something works / is configured. +The simplicity of their layout is amazing, was really good to pick out small modules and learn how something works / is configured. 2. https://github.com/Misterio77/nix-starter-configs - Really great starter config for learning how parts interact and how to generally structure flakes +Really great starter config for learning how parts interact and how to generally structure flakes 3. https://nixos.wiki/wiki/Fonts - Wiki page explaining how to install fonts and nerd fonts on NixOS +Wiki page explaining how to install fonts and nerd fonts on NixOS 4. https://github.com/adi1090x/rofi - For the Rofi theme +For the Rofi theme 5. https://github.com/zDyanTB/HyprNova - For the really cool hyprlock theme +For the really cool hyprlock theme diff --git a/SCREENSHARING b/SCREENSHARING deleted file mode 100644 index d3046f6..0000000 --- a/SCREENSHARING +++ /dev/null @@ -1,11 +0,0 @@ -Excellent Resource -https://gist.github.com/brunoanc/2dea6ddf6974ba4e5d26c3139ffb7580#install-xdg-desktop-portal-and-friends - -Hyprland official page on screensharing -https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/ - - -Multiple sources seem to think that use xdg-desktop-portal-wlr works (but I can't stream individual applications) -but I suppose that's better than nothing? - -Also check out xwaylandvideobridge diff --git a/docs/TODO.md b/TODO similarity index 100% rename from docs/TODO.md rename to TODO diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 6b9f235..0000000 --- a/TODO.md +++ /dev/null @@ -1,32 +0,0 @@ -## Next Up -1. Rename user "ae" to "cry" or "vps" -2. Add 404 page to nginx on hyrule -3. Add a user called "mirror" that stores important mirrors (inspiration: https://git.gay/mirror) - -## TODO -SOON: fix having to keep specifying new sha256 for home-manager (where I fetchTarball for it) - -Create a command palette accessible with MOD+P (MOD => Windows Key) - (ie make fullscreen, send to monitor, etc) - -Boring stuff (ie work and uni should go on a separate user account) - on in some separate $HOME atleast - -Is home-manager installed standalone? If so please remove that... - -Rewrite the README.md file its all over the place (add more structure to the `docs` directory instead) - -Add a MAC Changer module like -https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles/blob/main/nixos/mac-randomize.nix - -Make each monitor's window styling slightly different (just for fun) - -Research "input methods" ie https://wiki.archlinux.org/title/Input_method - -Bind 5 workspaces per connected monitor. - Then use the command palette (discussed prior) to send to - a different workspace (ie because I currently use MOD+SHIFT+n - but if n>=10 then it doesnt work! hence we need a command palette!) - -Can I run openvpn only for a specific proccess and its children? - then ie run qbittorrent (just in case the VPN isnt private) diff --git a/docs/TODO_UI.md b/TODO_UI similarity index 100% rename from docs/TODO_UI.md rename to TODO_UI diff --git a/banner b/banner deleted file mode 100644 index 67e1bd9..0000000 --- a/banner +++ /dev/null @@ -1,6 +0,0 @@ - .------------. - | oh my | - '------------' - ^ (\_(\ - '----- ( -.-) - o_(")(") diff --git a/config.temp/hyprland.conf b/config.temp/hyprland.conf deleted file mode 100755 index 4876e8a..0000000 --- a/config.temp/hyprland.conf +++ /dev/null @@ -1,373 +0,0 @@ -# All hyprland configuration variables are listed (even niche ones) -# to save you the hassle. Reference: https://wiki.hypr.land/Configuring/Variables/ -# -# You can split this configuration into multiple files -# Create your files separately and then link them to this file like this: -# source = ~/.config/hypr/myColors.conf - - -################ -### MONITORS ### -################ - -# Programming: -monitor=eDP-1, highres@highrr, auto, 1.0 -# Comfy: -#monitor=eDP-1, highres@highrr, auto, 1.5 - - -################### -### MY PROGRAMS ### -################### - -# See https://wiki.hyprland.org/Configuring/Keywords/ - -# Set programs that you use -$terminal = ghostty #rio -$fileManager = thunar -# $menu = wofi --show drun -# $menu = ags -t "applauncher" -$menu = fuzzel -$colorpicker = hyprpicker | head -c 7 | wl-copy - -################# -### AUTOSTART ### -################# - -# Autostart necessary processes (like notifications daemons, status bars, etc.) -# Or execute your favorite apps at launch like this: - -# exec-once = $terminal -# exec-once = nm-applet & -# exec-once = waybar & hyprpaper & firefox -exec-once = swww-daemon & -exec-once = mako & -# TODO: or do I do `swww init` or `swww restore`? - -# █▀▀ █▄░█ █░█   █░█ ▄▀█ █▀█ -# ██▄ █░▀█ ▀▄▀   ▀▄▀ █▀█ █▀▄ - -# See https://wiki.hyprland.org/Configuring/Environment-variables/ - -#env = HYPRCURSOR_THEME,Bibata-Modern-Ice -env = HYPRCURSOR_SIZE,16 -#env = XCURSOR_THEME,Bibata-Modern-Ice -env = XCURSOR_SIZE,16 - -env = QT_QPA_PLATFORM,wayland -env = QT_QPA_PLATFORMTHEME,qt5ct -env = XDG_MENU_PREFIX,arch- - -# TODO: make this variable (not dependent on helix) in my flake -env = EDITOR,hx -env = TERMINAL,rio - - - - -# DEBUG: attempting to get screensharing working... (please god help me) -# REFERENCE: https://github.com/hyprwm/xdg-desktop-portal-hyprland/issues/251#issuecomment-2345631820 -env = XDG_CURRENT_DESKTOP,Hyprland -exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP -#exec-once = dbus-update-activation-environment --systemd --all -#exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP - - - -# .__. .___ __..___. . . .___ .___. ._. __ __. -# [__] [__ (__ | |__| [__ | | / ` (__ -# | | [___ .__) | | | [___ | _|_ \__. .__) - -# Refer to https://wiki.hyprland.org/Configuring/Variables/ - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - gaps_in = 12 # margin between windows - gaps_out = 25 # margin from windows to monitor edge - gaps_workspaces = 0 # margin between workspaces (stacks with gaps_out) - # float_gaps = 0 # gaps_out but for floating windows - - border_size = 4 - - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg - col.inactive_border = rgba(00000000) - - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = true - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle - - snap { - enabled = false - window_gap = 10 - monitor_gap = 10 - border_overlap = false - # respect_gaps = false - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - rounding = 20 - rounding_power = 4.0 # Lp norm - border_part_of_window = true # consider border as part of its window - screen_shader = # path to custom GLSL fragment shader - - # Window Transparency - active_opacity = 1.0 - inactive_opacity = 0.95 - fullscreen_opacity = 1.0 # fullscreened windows - # Inactive Window Dimming - dim_inactive = false - dim_strength = 0.5 - dim_special = 0.2 - dim_around = 0.4 - - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur { - enabled = true - new_optimizations = true - xray = false # floating windows xray through tiling windows - ignore_opacity = true - - # Blur Parameters - size = 8 - passes = 1 - noise = 0.0117 # default - contrast = 0.8916 # default - brightness = 0.8172 # default - vibrancy = 0.1696 # default - vibrancy_darkness = 0.0 # default - - # Blurring For Specific Window Types - special = false # blur special windows - popups = false # blur popups - popups_ignorealpha = 0.2 - input_methods = false - input_methods_ignorealpha = 0.2 - } - - shadow { - enabled = true - ignore_window = true # only render at edges (not behind) - - range = 3 - render_power = 1 # falloff rate - sharp = false # aka infinite shadow.render_power - offset = 0 0 # vec2 - scale = 1.0 - - color = rgba(00000000) - color_inactive = rgba(000000ff) # defaults to shadow.color if unset - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#animations -animations { - enabled = yes, please :) - - # Animation Declaration Format: - # "animation = NAME, ENABLE, SPEED, BEZIER [,STYLE]" - # SPEED: in ds (where 1ds = 100ms) - - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - - #animation = windows, 1, 4.79, easeOutQuint - #animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsIn, 1, 4, linear, slide bottom - # animation = windowsOut, 1, 1.49, linear, popin 87% - animation = windowsOut, 1, 10, linear, popin - - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade -} - -# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[t1], gapsout:0, gapsin:0 -# workspace = w[tg1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrulev2 = bordersize 0, floating:0, onworkspace:w[t1] -# windowrulev2 = rounding 0, floating:0, onworkspace:w[t1] -# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tg1] -# windowrulev2 = rounding 0, floating:0, onworkspace:w[tg1] -# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] -# windowrulev2 = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to MOD + P in the keybinds section below - preserve_split = true # You probably want this -} - -# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#misc -misc { - #force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( - disable_splash_rendering = true -} - - -############# -### INPUT ### -############# - -# https://wiki.hyprland.org/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - follow_mouse = 1 - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - - touchpad { - natural_scroll = false - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = true -} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more -#device { -# name = epic-mouse-v1 -# sensitivity = -0.5 -#} - - -################### -### KEYBINDINGS ### -################### - -# See https://wiki.hyprland.org/Configuring/Keywords/ -$MOD = SUPER # Sets "Windows" key as main modifier - -# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more -bind = $MOD, RETURN, exec, $terminal -bind = $MOD, E, exec, $fileManager -bind = $MOD, R, exec, $menu -bind = $MOD, H, exec, $colorpicker - -bind = $MOD, F, fullscreen -bind = $MOD, V, togglefloating, -bind = $MOD, P, pseudo, # dwindle -bind = $MOD, J, togglesplit, # dwindle - -bind = $MOD, C, killactive, -#bind = $MOD, M, exit, - -# Move focus with MOD + arrow keys -bind = $MOD, left, movefocus, l -bind = $MOD, right, movefocus, r -bind = $MOD, up, movefocus, u -bind = $MOD, down, movefocus, d - -# Switch workspaces with MOD + [0-9] -bind = $MOD, 1, workspace, 1 -bind = $MOD, 2, workspace, 2 -bind = $MOD, 3, workspace, 3 -bind = $MOD, 4, workspace, 4 -bind = $MOD, 5, workspace, 5 -bind = $MOD, 6, workspace, 6 -bind = $MOD, 7, workspace, 7 -bind = $MOD, 8, workspace, 8 -bind = $MOD, 9, workspace, 9 -bind = $MOD, 0, workspace, 10 - -# Move active window to a workspace with MOD + SHIFT + [0-9] -bind = $MOD SHIFT, 1, movetoworkspace, 1 -bind = $MOD SHIFT, 2, movetoworkspace, 2 -bind = $MOD SHIFT, 3, movetoworkspace, 3 -bind = $MOD SHIFT, 4, movetoworkspace, 4 -bind = $MOD SHIFT, 5, movetoworkspace, 5 -bind = $MOD SHIFT, 6, movetoworkspace, 6 -bind = $MOD SHIFT, 7, movetoworkspace, 7 -bind = $MOD SHIFT, 8, movetoworkspace, 8 -bind = $MOD SHIFT, 9, movetoworkspace, 9 -bind = $MOD SHIFT, 0, movetoworkspace, 10 - -# Example special workspace (scratchpad) -bind = $MOD, S, togglespecialworkspace, magic -bind = $MOD SHIFT, S, movetoworkspace, special:magic - -# Scroll through existing workspaces with MOD + scroll -bind = $MOD, mouse_up, workspace, e-1 -bind = $MOD, mouse_down, workspace, e+1 -# Or with the keyboard -bind = $MOD SHIFT, left, workspace, e-1 -bind = $MOD SHIFT, right, workspace, e+1 - -# Move/resize windows with MOD + LMB/RMB and dragging -bindm = $MOD, mouse:272, movewindow -bindm = $MOD, mouse:273, resizewindow - -# Laptop multimedia keys for volume and LCD brightness -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- - -# Requires playerctl -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ - -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrulev2 = suppressevent maximize, class:.* - -# Fix some dragging issues with XWayland -windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/deploy b/deploy index 911d054..4dc0576 100755 --- a/deploy +++ b/deploy @@ -1,14 +1,11 @@ #!/usr/bin/env bash set -e -# TODO: use `nixos-rebuild build-vm` - usage="Usage: $(basename $0) [OPTIONS] Options: -f, --fresh Remove old content in the nixstore (good for debugging) -b, --bootloader Reinstall the bootloader - -r, --remote Locally build and remotely deploy Colmena hive -h, --help Show this message (^_^)" # delete all cached entries @@ -20,30 +17,12 @@ collect_garbage () { rebuild_flake () { # make sure all changes are visible to nixos git add . --verbose - local FLAGS= if [ "$1" = "reinstall-bootloader" ]; then - FLAGS="--install-bootloader" - # sudo nixos-rebuild switch --flake . --install-bootloader - # STC_DISPLAY_ALL_UNITS=1 (verbose, show output of all units) + sudo nixos-rebuild switch --flake . --install-bootloader + else + sudo nixos-rebuild switch --flake . + #nixos-rebuild build --flake .# --cores 8 -j 1 fi - - # LOG="$(mktemp /tmp/rebuild-XXXXXXXX)" - LOG="./rebuild.log" - echo "[*] Logging to $LOG" - sudo nixos-rebuild switch --flake . $FLAGS 2>&1 | tee "$LOG" - #nixos-rebuild build --flake .# --cores 8 -j 1 -} - -deploy_hive () { - echo "[+] Adding keys to ssh-agent" - ssh-add ~/.ssh/id_hyrule - printf "\n" - - git add . --verbose - # Deploy to all Colmena hives - colmena build --experimental-flake-eval - colmena apply --experimental-flake-eval - # colmena apply --on hyrule --experimental-flake-eval } # check which flags were given @@ -51,9 +30,6 @@ flag_fresh=false flag_bootloader=false for flag in "$@"; do case "$flag" in - -r|--remote) - deploy_hive - exit 0 ;; -f|--fresh) flag_fresh=true ;; -b|--bootloader) diff --git a/deploy-remote b/deploy-remote new file mode 100755 index 0000000..be09c7d --- /dev/null +++ b/deploy-remote @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e # terminate if any command fails + +echo "[+] Adding keys to ssh-agent" +ssh-add ~/.ssh/id_hyrule +printf "\n" + +git add . +# Deploy to all Colmena hives +colmena build --experimental-flake-eval +colmena apply --experimental-flake-eval +# colmena apply --on hyrule --experimental-flake-eval diff --git a/docs/DEV_ENV.md b/docs/DEV_ENV.md deleted file mode 100644 index 65e8bb0..0000000 --- a/docs/DEV_ENV.md +++ /dev/null @@ -1,67 +0,0 @@ -This file will document what features I believe I need -for NixOS to be a good development environment. - - -Issues I've encountered: -- [X] Audio not working -- [X] Tesseract is a pain in the ass to setup on Nix -- [ ] ags no longer supports `-t` flag, so applauncher won't work, requires switching to Astral -- [ ] script to enable/disable passwordless sudo - -- [X] Move Emile.Vault to new vault (I lost the password...) - -- [X] Add a simple and ugly bar - -- [ ] Install powertop (funny name) for monitoring power usage by processes -- [ ] Try to make my battery life bettery - -- [ ] Apply for JetBrains student license -- [ ] JetBrains Rider and VSCodium for C# -2. Imperative development environment behind NixOS (declarative), -similar to python's virtualenv but for the entirety of my system. - -- [X] Call my wishlist command "subspace (highway)" (Scott Pilgrim reference) - -- [ ] Create a GitHub profile readme like this persons: - https://github.com/yuyudhn -- [ ] Set a new GitHub profile picture (like github:@Vendicated) - artists credit: https://dotpict.net/users/1598051 -- [ ] Change GitHub location to /dev/zero, /dev/null, www, World Wide Web, etc -- [ ] Clean up my GitHub profile (only have things I'm proud of) - -- [X] Put a template website on my VPS -- [ ] Put a neoweb-esque webiste on my VPS -- [ ] Host a blog on my VPS - -- [ ] Clean laptop and PC, there's tons of unnecessary files and documents now -- [ ] Clean nixdots repo, start modularising it ^_^ -- [ ] Disable `allowUnfree` in nixdots everywhere, if a program needs it then they - can `mkForce` override it - -- [X] Add LSP for Nix in helix -- [ ] Make a way for me to put my laptop in a low power state, doing very specific actions like: - 1. disabling LSP use by default temporarily - -- [ ] Add https://github.com/levnikmyskin/hyprland-virtual-desktops - -TODO: -- [X] make btop theming declarative -- [X] Merge laptop and PC dotfiles repos -- [ ] declaratively install themes for gitkraken using home-manager - -Cool Technologies: -- wishlist (by charmbracelet) -- Vaultwarden server + Keyguard client -- devbox - - - -Random Idea List: -- [ ] powertop is cool but it's outdated and ugly, make a prettier one with charmbracelet's tui library - and call it powerbtm lmao -- [ ] Blog Post: a modern alternative to the suckless philosphy, - why GNU keeps failing cause their programs are amazing but - aren't designed for humans. suckless programs are excellent - too when writing shell scripts, but they suck in dev environments. - The solution is to gamify our code and focus on aesthetics - and "ergonomics" (usability) like what CharmBracelet does diff --git a/docs/PROBLEMLOG.md b/docs/PROBLEMLOG.md deleted file mode 100644 index 5b0e3a6..0000000 --- a/docs/PROBLEMLOG.md +++ /dev/null @@ -1,5 +0,0 @@ -180GB of disk space were used by my system which seemed absurd. Running the NixOS -garbage collector only removed 7GB. The rest was found via: -`du -hs ./.local/share/Games/drive_c/Program\ Files\ \(x86\)/Steam/dumps/reports/*` -tldr: there were 2714 30MB crash report files generated every minute of May 2nd 2025 (10 days ago) - SOLUTION: delete them all and hope it doesn't happen again diff --git a/docs/nixos_notes.md b/docs/nixos_notes.md deleted file mode 100644 index e396b10..0000000 --- a/docs/nixos_notes.md +++ /dev/null @@ -1,2 +0,0 @@ -Building specific parts of a NixOS system -https://nixos.org/manual/nixos/stable/#sec-building-parts diff --git a/flake.lock b/flake.lock old mode 100644 new mode 100755 index e1ab303..4e31fa3 --- a/flake.lock +++ b/flake.lock @@ -1,11 +1,82 @@ { "nodes": { + "ags": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1728326430, + "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", + "owner": "Aylur", + "repo": "ags", + "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", + "type": "github" + }, + "original": { + "owner": "Aylur", + "repo": "ags", + "type": "github" + } + }, + "ags_2": { + "inputs": { + "nixpkgs": "nixpkgs_5", + "systems": "systems_3" + }, + "locked": { + "lastModified": 1728326430, + "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", + "owner": "Aylur", + "repo": "ags", + "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", + "type": "github" + }, + "original": { + "owner": "Aylur", + "repo": "ags", + "type": "github" + } + }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1730968822, + "narHash": "sha256-NocDjINsh6ismkhb0Xr6xPRksmhuB2WGf8ZmXMhxu7Y=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "a49bc3583ff223f426cb3526fdaa4bcaa247ec14", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, "colmena": { "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils", "nix-github-actions": "nix-github-actions", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "stable": "stable" }, "locked": { @@ -39,6 +110,68 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1659877975, @@ -54,16 +187,38 @@ "type": "github" } }, - "grub2-themes": { + "gitignore": { "inputs": { - "nixpkgs": "nixpkgs_2" + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] }, "locked": { - "lastModified": 1757136219, - "narHash": "sha256-tKU+vq34KHu/A2wD7WdgP5A4/RCmSD8hB0TyQAUlixA=", + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "grub2-themes": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1730004881, + "narHash": "sha256-8xVIqIW25o2uCL0fxAmP4Sj9sdebarQXmd1+64yMe8o=", "owner": "vinceliuice", "repo": "grub2-themes", - "rev": "80dd04ddf3ba7b284a7b1a5df2b1e95ee2aad606", + "rev": "42c232dfb46bf93c17506cbc1a574e5e89b5e09f", "type": "github" }, "original": { @@ -72,6 +227,201 @@ "type": "github" } }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1728669738, + "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_4", + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems_2", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1730969692, + "narHash": "sha256-4Ly9zkqnRB6qLjMeddfUyd4iRLvq+RDspBWABS8DGN4=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "e58e97b0a38b8ccc87a4304c9e4e2b37c9966875", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1728345020, + "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "a7c183800e74f337753de186522b9017a07a8cee", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1728168612, + "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprpanel": { + "inputs": { + "ags": "ags_2", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1731270736, + "narHash": "sha256-N0unlLf/7BqkrYx3BO9svv1+oLzKpArgiqLzkmNpD3Q=", + "owner": "Jas-SinghFSU", + "repo": "HyprPanel", + "rev": "a7855baf13c6abdd0b0e988e4390112cd7deda67", + "type": "github" + }, + "original": { + "owner": "Jas-SinghFSU", + "repo": "HyprPanel", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1730968903, + "narHash": "sha256-zFvzLXcSm0Ia4XI1SE4FQ9KE63hlGrRWhLtwMolWuR8=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "3ce0cde8709cdacbfba471f8e828433b58a561e9", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "nix-flatpak": { + "locked": { + "lastModified": 1711997201, + "narHash": "sha256-J71xzQlVYsjagA4AsVwRazhBh2rZrPpKvxTgs6UzL7c=", + "owner": "gmodena", + "repo": "nix-flatpak", + "rev": "b76fa31346db7fc958a9898f3c594696ca71c4fd", + "type": "github" + }, + "original": { + "owner": "gmodena", + "ref": "v0.4.1", + "repo": "nix-flatpak", + "type": "github" + } + }, "nix-github-actions": { "inputs": { "nixpkgs": [ @@ -93,7 +443,58 @@ "type": "github" } }, + "nixcord": { + "inputs": { + "flake-compat": "flake-compat_3", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1730720546, + "narHash": "sha256-5147A6X0MH6u/YDxLe+Nnva3oxfLQanC716LarG/uoo=", + "owner": "kaylorben", + "repo": "nixcord", + "rev": "e3e27c77316f7526b1a846778ae9c759c9377611", + "type": "github" + }, + "original": { + "owner": "kaylorben", + "repo": "nixcord", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1730741070, + "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1734119587, "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=", @@ -109,29 +510,13 @@ "type": "github" } }, - "nixpkgs-unstable": { + "nixpkgs_3": { "locked": { - "lastModified": 1761114652, - "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "lastModified": 1730808093, + "narHash": "sha256-oOenwoxpzQsBNi7KltgnXqq6e0+CxlfNXKn3k27w6cQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1761269590, - "narHash": "sha256-yTr+PCi4wGbOEidrm8XyXBobLxLMqIBsbUyhwsN6wrc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d792a6e0cd4ba35c90ea787b717d72410f56dc40", + "rev": "c1a390f74b2c93f69a6805142f11a215a689cec1", "type": "github" }, "original": { @@ -141,28 +526,159 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { - "lastModified": 1761016216, - "narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1729880355, + "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "481cf557888e05d3128a76f14c76397b7d7cc869", + "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-25.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, + "nixpkgs_7": { + "locked": { + "lastModified": 1730768919, + "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1739357830, + "narHash": "sha256-9xim3nJJUFbVbJCz48UP4fGRStVW5nv4VdbimbKxJ3I=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0ff09db9d034a04acd4e8908820ba0b410d7a33a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1730814269, + "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { + "ags": "ags", "colmena": "colmena", "grub2-themes": "grub2-themes", - "nixpkgs": "nixpkgs_3", - "nixpkgs-unstable": "nixpkgs-unstable" + "hyprland": "hyprland", + "hyprpanel": "hyprpanel", + "nix-flatpak": "nix-flatpak", + "nixcord": "nixcord", + "nixpkgs": "nixpkgs_8", + "spicetify-nix": "spicetify-nix", + "swww": "swww" + } + }, + "spicetify-nix": { + "inputs": { + "flake-compat": "flake-compat_4", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730780158, + "narHash": "sha256-ZJkCFn4PL49rINz7xrjlBqw9nF8wWJE7fSVqbHlCWSA=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "2791c6662002731d3dfc00312307aef547e1c8be", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" } }, "stable": { @@ -180,6 +696,145 @@ "repo": "nixpkgs", "type": "github" } + }, + "swww": { + "inputs": { + "flake-compat": "flake-compat_5", + "nixpkgs": "nixpkgs_9", + "utils": "utils" + }, + "locked": { + "lastModified": 1730424990, + "narHash": "sha256-+8YUJsNzvgAeZYLfbHYfYlad/iS+6Eec/LWzL1ZIGfY=", + "owner": "LGFae", + "repo": "swww", + "rev": "0db3f4eb192f1c9bf914efcc1d2aba809da5d78a", + "type": "github" + }, + "original": { + "owner": "LGFae", + "repo": "swww", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1730743262, + "narHash": "sha256-iTLqj3lU8kFehPm5tXpctzkD274t/k1nwSSq3qCWXeg=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "09b23cef06fe248e61cec8862c04b9bcb62f4b6d", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix old mode 100644 new mode 100755 index e339ce6..861295a --- a/flake.nix +++ b/flake.nix @@ -2,47 +2,73 @@ description = "Emile's Nix Dotfiles"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; - nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; + # nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + #nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - colmena.url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a"; + #home-manager = { + # url = "github:nix-community/home-manager"; + # inputs.nixpkgs.follows = "nixpkgs"; + #}; + + spicetify-nix = { + url = "github:Gerg-L/spicetify-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixcord.url = "github:kaylorben/nixcord"; grub2-themes.url = "github:vinceliuice/grub2-themes"; + + # is this necessary? (aren't I enabling it in `configuration.nix` anyways?) + hyprland.url = "github:hyprwm/Hyprland"; + + swww.url = "github:LGFae/swww"; + + # TODO: declarative flatpak management + nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; + + ags.url = "github:Aylur/ags"; + + hyprpanel.url = "github:Jas-SinghFSU/HyprPanel"; + + # colmena.url = "github:zhaofengli/colmena"; + colmena.url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a"; + # alternative to colmena (currently in testing) + #deploy-rs.url = "github:serokell/deploy-rs"; + + #wishlist.url = "path:/home/me/nixdots/flakes/wishlist"; }; outputs = { self, nixpkgs, - nixpkgs-unstable, + #home-manager, + hyprland, grub2-themes, + nixcord, colmena, + #deploy-rs, ... } @ inputs: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; + config = { - allowUnfree = false; # sanity check + allowUnfree = true; }; }; - pkgs-unstable = import nixpkgs-unstable { - inherit system; - config = { - allowUnfree = true; # TODO: bandaid solution... (for minecraft-server) - }; - }; # TODO: come back to this its really cool # this is just something I'm experimenting with - # PROJECT_ROOT = builtins.toString ./.; + PROJECT_ROOT = builtins.toString ./.; in { + # `nix develop` shell devShells."x86_64-linux".default = pkgs.mkShell { - shell = "${pkgs.bash}/bin/bash"; - - packages = with pkgs; [ - # ./script/* dependencies - mkpasswd + buildInputs = [ + #colmena-new ]; }; @@ -50,7 +76,7 @@ # i be on my puter fr myputer = nixpkgs.lib.nixosSystem { # nix passes these to every single module - specialArgs = {inherit inputs pkgs-unstable;}; + specialArgs = {inherit inputs pkgs;}; modules = [ ./hosts/myputer @@ -60,21 +86,48 @@ # my laptop 0w0 lolcathost = nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs pkgs-unstable;}; + specialArgs = {inherit inputs pkgs;}; modules = [ ./hosts/lolcathost grub2-themes.nixosModules.default ]; }; + + # meine vps + # hyrule = nixpkgs.lib.nixosSystem { + # # manually set system architecture since + # # this is for a remote deployment + # system = "x86_64-linux"; + # specialargs = {inherit inputs pkgs;}; + # + # modules = [ + # ./hosts/hyrule + # ]; + # }; }; + # remote deployment with deploy-rs + # deploy.nodes.hyrule = { + # hostname = "imbored.dev"; + # # create a primary profile called "system" + # profiles.system = { + # user = "root"; # user to deploy to + # path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.hyrule; + # + # # ssh configuration for reaching the server + # sshUser = "ae"; + # #interactiveSudo = true; # TODO: use this and revoke passwordless sudo for ae + # sshOpts = ["-i" "/home/me/.ssh/id_hyrule"]; + # remoteBuild = false; # build locally then deploy to remote host + # }; + # }; + # remote deployment to my servers!! colmenaHive = colmena.lib.makeHive { meta = { + # set nixpkgs global nixpkgs = pkgs; - specialArgs = {inherit pkgs-unstable;}; - # set nixpkgs per server nodeNixpkgs = { hyrule = import nixpkgs { @@ -82,6 +135,9 @@ config.allowUnfree = false; }; }; + + # we can use `specialArgs.inputs` to inject wishlist into hyrule's module + #specialArgs.inputs = with inputs; {inherit wishlist;}; }; # meine vps diff --git a/hosts/modules/flakes/wishlist/README b/flakes/wishlist/README similarity index 100% rename from hosts/modules/flakes/wishlist/README rename to flakes/wishlist/README diff --git a/hosts/modules/flakes/wishlist/flake.nix b/flakes/wishlist/flake.nix similarity index 100% rename from hosts/modules/flakes/wishlist/flake.nix rename to flakes/wishlist/flake.nix diff --git a/hosts/modules/flakes/wishlist/wishlist.nix b/flakes/wishlist/wishlist.nix similarity index 100% rename from hosts/modules/flakes/wishlist/wishlist.nix rename to flakes/wishlist/wishlist.nix diff --git a/homes/ae/default.nix b/homes/ae/default.nix index 3c33619..b92f739 100644 --- a/homes/ae/default.nix +++ b/homes/ae/default.nix @@ -11,9 +11,6 @@ }; imports = [ - ../modules/fish.nix - ../modules/bat.nix - ../modules/btop.nix ]; home = { @@ -21,8 +18,39 @@ homeDirectory = "/home/ae"; }; + programs = { + }; + # Nicely reload system units when changing configs systemd.user.startServices = "sd-switch"; + # ssh = { + # enable = true; + # forwardAgent = true; + # addKeysToAgent = "yes"; + + # matchBlocks = { + # hyrule = { + # hostname = "imbored.dev"; + # user = "ae"; + # port = 22; + # identityFile = "/home/ae/.ssh/id_hyrule"; + # }; + # }; + # }; + + # SERVICE: webfishing (example for wishlist) + #systemd.user.services.webfishing = { + # Unit.Description = "I be out here webfishing frfr"; + + # Install.WantedBy = ["default.target"]; + + # Service = { + # Type = "exec"; + # ExecStart = "echo $HOME; cat $HOME/.ssh/config"; + # Restart = "always"; + # }; + #}; + home.stateVersion = "24.11"; # DO NOT MODIFY } diff --git a/homes/me/default.nix b/homes/me/default.nix index 6998e63..b858211 100755 --- a/homes/me/default.nix +++ b/homes/me/default.nix @@ -4,48 +4,50 @@ lib, config, pkgs, - pkgs-unstable, ... -} @ args: { +}: { + nixpkgs = { + config.allowUnfree = true; + }; + imports = [ - ../modules/fish.nix - ../modules/btop.nix - ../modules/tmux.nix - ../modules/term/foot.nix ../modules/git.nix ../modules/bat.nix - + ../modules/fish.nix ../modules/editor/helix.nix - (import ../modules/editor/vscode.nix args) + ../modules/btop.nix + ../modules/rio.nix ../modules/firefox.nix - ../modules/apps/thunderbird.nix + ../modules/nixcord.nix - #../modules/wm/hypr/hypridle.nix - ../modules/wm/hypr/hyprlock.nix + #../modules/hypr/hypridle.nix + #../modules/hypr/hyprlock.nix ../modules/kanshi.nix ../modules/ags - ../modules/mako.nix ]; - nixpkgs.config.allowUnfreePredicate = pkg: - builtins.elem (lib.GetName pkg) [ - "vscode-extension-ms-dotnettools-csharp" - ]; + /* + programs.spicetify = + let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in + { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + hidePodcasts + shuffle # shuffle+ (special characters are sanitized out of extension names) + ]; + theme = spicePkgs.themes.catppuccin; + colorScheme = "mocha"; + }; + */ home = { username = "me"; homeDirectory = "/home/me"; - shellAliases = { - brip = "batgrep"; # bat + ripgrep - man = "batman"; # bat + man - }; - - sessionVariables = { - NIX_SHELL_PRESERVE_PROMPT = 1; - }; - pointerCursor = { gtk.enable = true; # x11.enable = true # dont enable since im on hyprland @@ -53,18 +55,6 @@ name = "Bibata-Modern-Ice"; size = 16; }; - - packages = with pkgs; [ - # for services.gnome-keyring - pkgs.gcr # provides org.gnome.keyring.SystemPrompter - seahorse # gui - - tor-browser - - fuzzel - - speedtest-cli - ]; }; gtk = { @@ -81,12 +71,15 @@ # TODO: use a variable to mirror this cursor size # with the `home.pointerCurser.size` cursorTheme = { + # dont set the theme (use system default instead) + # only set size to match the system package = pkgs.bibata-cursors; name = "Bibata-Modern-Ice"; size = 16; }; }; + # TODO: this lowkey doesnt work... (maybe the name "Dracula" is wrong?) qt = { enable = true; platformTheme.name = "gtk2"; @@ -97,29 +90,24 @@ # these are both required for home-manager to work home-manager.enable = true; - zsh = { + # DEBUG: testing if my xdg-desktop-portal-hyprland is working or not + obs-studio = { enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - - history = { - size = 10000; - ignoreAllDups = true; - path = "$HOME/.zsh_history"; - ignorePatterns = [ - "rm *" - ]; - }; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; }; # set ssh profiles + # (all we need is hyrule, everything else is through wishlist) # NOTE: (IMPORTANT) this DOES NOT start the ssh-agent # for that you need to use `services.ssh-agent.enable` ssh = { enable = true; - forwardAgent = false; - addKeysToAgent = "no"; + forwardAgent = true; + addKeysToAgent = "yes"; # always add keys to ssh-agent matchBlocks = { hyrule = { @@ -127,9 +115,6 @@ user = "ae"; port = 22; identityFile = "~/.ssh/id_hyrule"; - setEnv = { - TERM = "linux"; - }; }; subspace = { hostname = "imbored.dev"; @@ -137,36 +122,46 @@ port = 22; identityFile = "~/.ssh/id_subspace"; }; - dead = { - hostname = "deadlyserver.com"; - user = "emile"; - port = 29843; - identityFile = "~/.ssh/id_deadlyserver"; - setEnv = { - TERM = "xterm-256color"; - }; - }; - youcue = { - hostname = "moss.labs.eait.uq.edu.au"; - user = "s4740056"; - port = 22; - identityFile = "~/.ssh/id_youcue"; - setEnv = { - TERM = "xterm-256color"; - }; - }; }; }; + + # I want to use fish as my login shell but it always + # goes terrible cause it isn't POSIX compliant, so + # instead Bash is my login and it will just exec fish + #bash = { + # interactiveShellInit = '' + # if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + # then + # shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + # exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + # fi + # ''; + #}; + + /* + spicetify = + let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in + { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + hidePodcasts + #shuffle + ]; + theme = spicePkgs.themes.catppuccin; + colorScheme = "mocha"; + }; + */ }; - services = { - # enable OpenSSH private key agent - ssh-agent.enable = true; - - gnome-keyring.enable = true; - }; + # enable OpenSSH private key agent + services.ssh-agent.enable = true; # the ssh-agent won't set this for itself... systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent"; + #home.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent"; + # Nicely reload system units when changing configs systemd.user.startServices = "sd-switch"; diff --git a/homes/modules/ags/config.js b/homes/modules/ags/config.js index 5a11efc..904ba9e 100755 --- a/homes/modules/ags/config.js +++ b/homes/modules/ags/config.js @@ -1,28 +1,24 @@ import { AppLauncher } from "./widgets/applauncher.js" -//import { Notifications } from "./widgets/notifications.js" +import { Notifications } from "./widgets/notifications.js" -/* const date = Variable('', { poll: [1000, 'date'], }) -*/ -/* const Bar = (monitor = 0) => Widget.Window({ monitor, name: 'bar${monitor}', anchor: ['top', 'left', 'right'], child: Widget.Label({ label: date.bind() }), }) -*/ App.config({ style: "./style.css", // icons: "./assets", windows: [ - //Bar(), + Bar(), AppLauncher, - //Notifications() + Notifications() ] // gtkTheme: "Adwaita-dark", // cursorTheme: "Qogir", diff --git a/homes/modules/ags/widgets/fullscreen.js b/homes/modules/ags/widgets/fullscreen.js index 72682f2..a6c60f0 100755 --- a/homes/modules/ags/widgets/fullscreen.js +++ b/homes/modules/ags/widgets/fullscreen.js @@ -2,10 +2,10 @@ const WINDOW_NAME = "fullscreen"; const Fullscreen = (children) => Widget.Box({ vertical: true, - css: "background-image: url('~/downloads/wallpaper/kill-my-firstborn/astronaut-pink-blue.png');", - //+ "background-size: cover;" - //+ "background-position: center;" - //+ "background-repeat: no-repeat;", + css: "background-image: url('https://images2.alphacoders.com/135/1351579.png');" + + "background-size: cover;" + + "background-position: center;" + + "background-repeat: no-repeat;", children: children, }) diff --git a/homes/modules/apps/thunderbird.nix b/homes/modules/apps/thunderbird.nix deleted file mode 100644 index dd4f861..0000000 --- a/homes/modules/apps/thunderbird.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - programs.thunderbird = { - enable = true; - profiles = { - "me" = { - isDefault = true; - }; - }; - }; -} diff --git a/homes/modules/bat.nix b/homes/modules/bat.nix index fca2231..f29f49b 100755 --- a/homes/modules/bat.nix +++ b/homes/modules/bat.nix @@ -12,13 +12,4 @@ theme = "Dracula"; }; }; - - # other commands that make normal utils prettier - home.packages = with pkgs.bat-extras; [ - batdiff - batgrep - batman - batwatch - prettybat - ]; } diff --git a/homes/modules/btop.nix b/homes/modules/btop.nix index 918eb25..119da4f 100644 --- a/homes/modules/btop.nix +++ b/homes/modules/btop.nix @@ -18,7 +18,7 @@ background_update = true; update_ms = 2000; rounded_corners = false; - graph_symbol = "block"; # braille/block/tty + graph_symbol = "braille"; # braille/block/tty graph_symbol_cpu = "default"; graph_symbol_mem = "default"; graph_symbol_net = "default"; diff --git a/homes/modules/editor/helix.nix b/homes/modules/editor/helix.nix index 8d6e22c..4a66841 100755 --- a/homes/modules/editor/helix.nix +++ b/homes/modules/editor/helix.nix @@ -1,10 +1,13 @@ -{pkgs, ...}: { +{ + config, + pkgs, + ... +}: { # read https://docs.helix-editor.com/editor.html programs.helix = { enable = true; settings = { theme = "dracula"; - editor = { line-number = "absolute"; popup-border = "all"; @@ -104,83 +107,29 @@ }; }; - languages = { - language = [ - { - name = "nix"; - indent = { - tab-width = 2; - unit = " "; - }; - block-comment-tokens = { - start = "/*"; - end = "*/"; - }; - auto-format = true; - formatter.command = "${pkgs.alejandra}/bin/alejandra"; - language-servers = ["nixd"]; - } - { - name = "python"; - indent = { - tab-width = 4; - unit = " "; - }; - auto-format = false; # my python is beautiful ^_^ - rulers = [80]; - } - { - name = "c"; - file-types = ["c" "h"]; # use .hpp for C++ - auto-format = false; - formatter.command = "${pkgs.clang-tools}/bin/clang-format"; - language-servers = ["clangd"]; - } - { - name = "haskell"; - auto-format = true; - formatter.command = "${pkgs.ormolu}/bin/ormolu"; - language-servers = ["haskell-language-server"]; - } - # { - # name = "c-sharp"; - # source = "source.cs"; - # file-types = ["cs"]; - # indent = { - # tab-width = 4; - # unit = " "; - # }; - # block-comment-tokens = { - # start = "/*"; - # end = "*/"; - # }; - # # auto-format = false; - # # formatter.command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp"; - # # language-servers = ["OmniSharp"]; - # } - ]; - - language-server = { - # use nixd as default nix lsp (I haven't tried nil yet) - # NOTE: nixd will be supported by default after nix 24.07 - # SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix - nixd = { - command = "${pkgs.nixd}/bin/nixd"; + languages.language = [ + { + name = "nix"; + indent = { + tab-width = 2; + unit = " "; }; - # clangd for C - clangd = { - command = "${pkgs.clang-tools}/bin/clangd"; + block-comment-tokens = { + start = "/*"; + end = "*/"; }; - - haskell-language-server = { - command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper"; + auto-format = true; + formatter.command = "${pkgs.alejandra}/bin/alejandra"; + } + { + name = "python"; + indent = { + tab-width = 4; + unit = " "; }; - - # C# language services - OmniSharp = { - command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp"; - }; - }; - }; + auto-format = false; # my python is beautiful ^_^ + rulers = [80]; + } + ]; }; } diff --git a/homes/modules/editor/vscode.nix b/homes/modules/editor/vscode.nix deleted file mode 100644 index f824b1c..0000000 --- a/homes/modules/editor/vscode.nix +++ /dev/null @@ -1,134 +0,0 @@ -{ - config, - lib, - pkgs, - vscodium ? false, - secret-service ? "gnome-libsecret", - vscode-argv ? ".vscode/argv.json", - ... -}: { - nixpkgs.overlays = [ - ( - self: super: { - vscode-extensions = super.vscode-extensions.overrideAttrs (prev: let - mkVscMarketplaceExtension = { - publisher, - name, - version, - hash, - description ? "", - homepage ? null, - changelog ? null, - license ? null, - maintainers ? [lib.maintainers.emileclarkb], - }: - with pkgs.vscode-utils.buildVscodeMarketplaceExtension; { - ${publisher}.${name} = buildVscodeMarketplaceExtension { - mktplcRef = { - inherit - publisher - name - version - hash - ; - }; - - meta = { - inherit - ( - if license != null - then {license = license;} - else {} - ) - description - homepage - maintainers - ; - downloadPage = "https://marketplace.visualstudio.com/items?itemName=${publisher}.${name}"; - changelog = - if changelog != null - then changelog - else "https://marketplace.visualstudio.com/items/${publisher}.${name}/changelog"; - }; - }; - }; - in - lib.mergeAttrsList [ - (mkVscMarketplaceExtension { - publisher = "ms-dotnettools"; - name = "dotnet-maui"; - version = "1.11.14"; - hash = lib.fakeHash; - - description = "Extend C# Dev Kit with tools for building .NET Multi-platform App UI (MAUI) apps"; - homepage = "https://github.com/microsoft/vscode-dotnettools"; - license = lib.licenses.unfree; - }) - ]); - } - ) - ]; - - # REF: https://home-manager-options.extranix.com/?query=vscode&release=release-25.05 - programs.vscode = { - enable = true; - # TODO: clean up - package = - ( - if vscodium - then pkgs.vscodium - else pkgs.vscode - ).overrideAttrs (oldAttrs: { - # runtimeDependencies = oldAttrs.runtimeDependencies ++ [] - }); - - mutableExtensionsDir = true; - - profiles.default = { - enableUpdateCheck = false; - enableExtensionUpdateCheck = false; - # extension format: USER.PACKAGENAME - extensions = with pkgs.vscode-extensions; [ - # .NET - ms-dotnettools.csharp - ms-dotnettools.csdevkit - ms-dotnettools.vscode-dotnet-runtime - # TODO: these extensions aren't packaged :( - # deitry.solution-syntax - # ms-dotnettools.vscode-dotnet-pack - # ms-dotnettools.dotnet-maui - - # Python - ms-python.python - - # GitLens by GitKraken - eamodio.gitlens - ms-azuretools.vscode-docker - - github.copilot - github.copilot-chat - - # Colors & Themes - dracula-theme.theme-dracula - catppuccin.catppuccin-vsc - catppuccin.catppuccin-vsc-icons - mvllow.rose-pine - ]; - - userSettings = { - "workbench.colorTheme" = "Dracula Theme"; - "github.copilot.nextEditSuggestions.enabled" = true; - }; - }; - }; - - # TODO: this is super ugly, make sure the JSON is formatted!! - home.file.${vscode-argv}.text = builtins.toJSON { - password-store = secret-service; - - disable-hardware-acceleration = false; - disable-color-correct-rendering = false; - enable-crash-reporter = false; - # crash-report-id = ...; - }; -} diff --git a/homes/modules/editor/vscodium.nix b/homes/modules/editor/vscodium.nix deleted file mode 100644 index ecde271..0000000 --- a/homes/modules/editor/vscodium.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - # REF: https://home-manager-options.extranix.com/?query=vscode&release=release-25.05 - programs.vscode = { - enable = true; - package = pkgs.vscodium; - - mutableExtensionsDir = true; - - profiles.default = { - enableUpdateCheck = false; - enableExtensionUpdateCheck = false; - # extension format: USER.PACKAGENAME - extensions = with pkgs.vscode-extensions; [ - # .NET - ms-dotnettools.csharp - ms-dotnettools.csdevkit - ms-dotnettools.vscode-dotnet-runtime - # ms-dotnettools.vscode-dotnet-pack - # ms-dotnettools.dotnet-maui - - # Colors & Themes - dracula-theme.theme-dracula - catppuccin.catppuccin-vsc - catppuccin.catppuccin-vsc-icons - mvllow.rose-pine - ]; - - userSettings = { - "workbench.colorTheme" = "Dracula Theme"; - }; - }; - }; -} diff --git a/homes/modules/fish.nix b/homes/modules/fish.nix index 801fa0f..e46175d 100755 --- a/homes/modules/fish.nix +++ b/homes/modules/fish.nix @@ -1,69 +1,19 @@ { config, - lib, pkgs, ... }: { - options = { - morphBashToFish = lib.mkEnableOption "morphBashToFish"; - }; - - # TODO: make the greeting controllable (ie so my VPS can be different) - config = { - programs.fish = { - enable = true; - generateCompletions = true; - - # vendor = { - # config.enable = true; - # functions.enable = true; - # completions.enable = true; - # }; - - interactiveShellInit = '' - # add dotnet completions if it exists (ie we're in a virtual environment) - if type -q dotnet - complete -f -c dotnet -a "(dotnet complete (commandline -cp))" - end - - function rand_greet - set weary "Welcome weary traveller to my shop" - set alone "It's dangerous to go alone! Take this." - set sad "Do butterflies cry when they're sad?" - set alice "I think Alice is lost..." - set greetings "$weary" "$alone" "$sad" "$alice" - echo -n $greetings[(random 1 (count $greetings))] - end - - function gitignore -a type - curl -sL "https://www.gitignore.io/api/$type" - end - - # ripgrep on files - function rgf - rg --files | rg $args - end - - set -g fish_greeting (rand_greet) - - - ''; - - shellAliases = { - brip = "batgrep"; # bat + ripgrep - man = "batman"; # bat + man - ls = "eza --color=auto"; - l = "eza -Alh --color=auto --icons=auto"; - ll = "eza -lh --color=auto --icons=auto"; - li = "eza --color=auto --git-ignore"; - }; - - plugins = [ - { - name = "grc"; - src = pkgs.fishPlugins.grc.src; - } - ]; - }; + programs.fish = { + enable = true; + interactiveShellInit = '' + #set -g fish_greeting "Welcome weary traveler to my shop" + cat ~/banner + ''; + plugins = [ + { + name = "grc"; + src = pkgs.fishPlugins.grc.src; + } + ]; }; } diff --git a/homes/modules/git.nix b/homes/modules/git.nix index fdf6afb..c98ab4e 100755 --- a/homes/modules/git.nix +++ b/homes/modules/git.nix @@ -5,48 +5,7 @@ }: { programs.git = { enable = true; - lfs.enable = true; - userName = "Emile Clark-Boman"; userEmail = "eclarkboman@gmail.com"; - - aliases = { - s = "status"; - d = "diff"; - l = "log"; - c = "commit"; - p = "push"; - }; - - extraConfig = { - color.ui = true; - core.editor = "hx"; - github.user = "emileclarkb"; - - init = { - defaultBranch = "main"; - }; - url = { - "https://github.com/" = { - insteadOf = [ - "gh:" - "github:" - ]; - }; - "https://gitlab.com/" = { - insteadOf = [ - "gl:" - "gitlab:" - ]; - }; - }; - }; - - includes = [ - { - path = "/home/me/agribit/.gitconfig"; - condition = "gitdir:/home/me/agribit/**"; - } - ]; }; } diff --git a/homes/modules/wm/hypr/hypridle.nix b/homes/modules/hypr/hypridle.nix similarity index 100% rename from homes/modules/wm/hypr/hypridle.nix rename to homes/modules/hypr/hypridle.nix diff --git a/hosts/modules/core/sound/default.nix b/homes/modules/hypr/hyprland.nix similarity index 100% rename from hosts/modules/core/sound/default.nix rename to homes/modules/hypr/hyprland.nix diff --git a/homes/modules/wm/hypr/hyprlock.nix b/homes/modules/hypr/hyprlock.nix similarity index 100% rename from homes/modules/wm/hypr/hyprlock.nix rename to homes/modules/hypr/hyprlock.nix diff --git a/homes/modules/mako.nix b/homes/modules/mako.nix deleted file mode 100644 index 762cd96..0000000 --- a/homes/modules/mako.nix +++ /dev/null @@ -1,54 +0,0 @@ -{...}: let - dracula = rec { - background = "#282A36"; - border = cyan; - - cyan = "#8BE9FD"; - yellow = "#F1FA8C"; - red = "#FF5555"; - }; - - theme = dracula; -in { - # notification daemon for Wayland - services.mako = { - enable = true; - settings = { - actions = true; - anchor = "top-right"; - layer = "overlay"; - sort = "-time"; - - height = 100; - width = 300; - margin = 50; - background-color = theme.background; - border-color = theme.border; - border-radius = 20; - border-size = 4; - font = "monospace 10"; - - markup = true; - icons = true; - max-icon-size = 64; - - default-timeout = 5000; - ignore-timeout = false; - - "actionable=true" = { - anchor = "top-left"; - }; - - "urgency=low" = { - border-color = theme.border; - }; - "urgency=normal" = { - border-color = theme.yellow; - }; - "urgency=high" = { - default-timeout = 0; - border-color = theme.red; - }; - }; - }; -} diff --git a/homes/modules/obs.nix b/homes/modules/obs.nix deleted file mode 100755 index 37db38f..0000000 --- a/homes/modules/obs.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - pkgs, - ... -}: { - programs = { - obs-studio = { - enable = true; - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - obs-backgroundremoval - obs-pipewire-audio-capture - ]; - }; - }; -} diff --git a/homes/modules/term/rio.nix b/homes/modules/rio.nix similarity index 90% rename from homes/modules/term/rio.nix rename to homes/modules/rio.nix index 88ef968..84ea3a2 100755 --- a/homes/modules/term/rio.nix +++ b/homes/modules/rio.nix @@ -3,16 +3,8 @@ pkgs, ... }: { - home = { - packages = [ - pkgs.rio - ]; - - # currently set to ghostty (on lolcathost) - #sessionVariables.TERMINAL = "rio"; - }; - # The terminal I use + # TODO: this is dependent on nvim being installed # TODO: make this into a module with a configurable editor option programs.rio = { enable = true; diff --git a/homes/modules/term/default.nix b/homes/modules/term/default.nix deleted file mode 100644 index d446b15..0000000 --- a/homes/modules/term/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - lib, - ... -}: -{ - options = { - - } -} diff --git a/homes/modules/term/foot.nix b/homes/modules/term/foot.nix deleted file mode 100644 index 348eefa..0000000 --- a/homes/modules/term/foot.nix +++ /dev/null @@ -1,327 +0,0 @@ -{pkgs-unstable, ...}: { - programs.foot = { - enable = true; - package = pkgs-unstable.foot; - - server.enable = true; - - settings = let - none = "\"\""; - in { - main = { - term = "foot"; # set $TERM - login-shell = "no"; - title = "foot"; - locked-title = "no"; - - # font = "GeistMono Nerd Font:size=12"; - # font = "Mononoki Nerd Font Mono:size=12"; - # font = "0xProto Nerd Font Mono:size=12"; - font = "JetBrainsMonoNL Nerd Font:size=12"; - # font-bold = ""; - # font-italice = ""; - # font-bold-italice = ""; - # font-size-adjustment = 0.5; - # line-height = ...; - # letter-spacing = 0; - # horizontal-letter-offset = 0; - # vertical-letter-offset = 0; - # underline-offset = ...; - # underline-thickness = ...; - # strikeout-thickness = ...; - box-drawings-uses-font-glyphs = "no"; - dpi-aware = "no"; - gamma-correct-blending = "no"; - - initial-color-theme = "1"; - # initial-window-size-pixels = "700x500"; # pixel COLSxROWS - initial-window-size-chars = "90x26"; # char COLSxROWS - initial-window-mode = "windowed"; - pad = "32x32 center-when-maximized-and-fullscreen"; - resize-by-cells = "yes"; - resize-keep-grid = "yes"; - resize-delay-ms = "100"; - - bold-text-in-bright = "no"; - word-delimiters = ",│`|:\"'()[]{}<>"; - selection-target = "primary"; - # workers = ...; # number of logical CPUs - }; - - # environment = { - # name = "value"; - # } - - security = { - osc52 = "enabled"; - }; - - bell = { - system = "no"; - urgent = "no"; - notify = "no"; - visual = "no"; - # command = ...; - # command-focused = "no"; - }; - - desktop-notifications = { - command = "notify-send --wait --app-name \${app-id} --icon \${app-id} --category \${category} --urgency \${urgency} --expire-time \${expire-time} --hint STRING:image-path:\${icon} --hint BOOLEAN:suppress-sound:\${muted} --hint STRING:sound-name:\${sound-name} --replace-id \${replace-id} \${action-argument} --print-id -- \${title} \${body}"; - command-action-argument = "--action \${action-name=\${action-label}}"; - close = none; - inhibit-when-focused = "no"; - }; - - scrollback = { - lines = 1000; - multiplier = 1.0; - indicator-position = "relative"; - indicator-format = none; - }; - - url = { - launch = "xdg-open \${url}"; - label-letters = "sadfjklewcmpgh"; - osc8-underline = "url-mode"; - regex = "(((https?://|mailto:|ftp://|file:|ssh:|ssh://|git://|tel:|magnet:|ipfs://|ipns://|gemini://|gopher://|news:)|www\\.)([0-9a-zA-Z:/?#@!$&*+,;=.~_%^\\-]+|\\([]\\[\"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\\)|\\[[\\(\\)\"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\\]|\"[]\\[\\(\\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\"|'[]\\[\\(\\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\\-]*')+([0-9a-zA-Z/#@$&*+=~_%^\\-]|\\([]\\[\"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\\)|\\[[\\(\\)\"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\\]|\"[]\\[\\(\\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\\-]*\"|'[]\\[\\(\\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\\-]*'))"; - }; - - # "regex:your-fancy-name" = { - # regex = ...; - # launch = "[path to script/application] \${match}" - # }; - # - # key-bindings = { - # regex-launch = "[your-fancy-name] Control+Shift+q"; - # regex-copy = "[your-fancy-name] Control+Alt+shift+q"; - # }; - - cursor = { - style = "block"; - blink = "no"; - # blink-rate = 500; - beam-thickness = 1.0; - # underline-thickness = ...; - }; - - mouse = { - hide-when-typing = "yes"; - alternate-scroll-mode = "yes"; - }; - - touch = { - long-press-delay = 400; - }; - - # Theme: Dracula - # REF: https://github.com/dracula/foot - colors = { - alpha = 1.0; - alpha-mode = "default"; # default/matching/all - - background = "282a36"; - foreground = "f8f8f2"; - - ## Normal/regular colors (color palette 0-7) - regular0 = "21222c"; # black - regular1 = "ff5555"; # red - regular2 = "50fa7b"; # green - regular3 = "f1fa8c"; # yellow - regular4 = "bd93f9"; # blue - regular5 = "ff79c6"; # magenta - regular6 = "8be9fd"; # cyan - regular7 = "f8f8f2"; # white - - ## Bright colors (color palette 8-15) - bright0 = "6272a4"; # bright black - bright1 = "ff6e6e"; # bright red - bright2 = "69ff94"; # bright green - bright3 = "ffffa5"; # bright yellow - bright4 = "d6acff"; # bright blue - bright5 = "ff92df"; # bright magenta - bright6 = "a4ffff"; # bright cyan - bright7 = "ffffff"; # bright white - - ## Misc colors - selection-foreground = "ffffff"; - selection-background = "44475a"; - # jump-labels= # black-on-yellow - # scrollback-indicator= # black-on-bright-blue - # search-box-no-match= # black-on-red - # search-box-match= # black-on-yellow - urls = "8be9fd"; - - flash = "7f7f00"; - flash-alpha = 0.5; - }; - - # Alternative colour palette (see `man 5 foot.ini`) - colors2 = { - alpha = 1.0; - alpha-mode = "default"; - - background = "191724"; - foreground = "e0def4"; - - regular0 = "26233a"; # black (Overlay) - regular1 = "eb6f92"; # red (Love) - regular2 = "9ccfd8"; # green (Foam) - regular3 = "f6c177"; # yellow (Gold) - regular4 = "31748f"; # blue (Pine) - regular5 = "c4a7e7"; # magenta (Iris) - regular6 = "ebbcba"; # cyan (Rose) - regular7 = "e0def4"; # white (Text) - - bright0 = "47435d"; # bright black (lighter Overlay) - bright1 = "ff98ba"; # bright red (lighter Love) - bright2 = "c5f9ff"; # bright green (lighter Foam) - bright3 = "ffeb9e"; # bright yellow (lighter Gold) - bright4 = "5b9ab7"; # bright blue (lighter Pine) - bright5 = "eed0ff"; # bright magenta (lighter Iris) - bright6 = "ffe5e3"; # bright cyan (lighter Rose) - bright7 = "fefcff"; # bright white (lighter Text) - - selection-foreground = "ffffff"; - selection-background = "393553"; - - urls = "ebbcba"; # Rose - - flash = "f6c177"; # yellow (Gold) - flash-alpha = 0.5; - - cursor = "191724 e0def4"; - }; - - # csd = { - # preferred = "server"; - # size = 26; - # font = ...; - # color = ...; # foreground color - # hide-when-maximized = "no"; - # border-width = 0; - # border-color = ...; - # button-width = 26; - # button-color = ...; # background color - # button-minimize-color = ...; - # button-maximize-color = ...; - # button-close-color = ...; - # }; - - key-bindings = { - scrollback-up-page = "Shift+Page_Up Shift+KP_Page_Up"; - # scrollback-up-half-page = "none"; - # scrollback-up-line = "none"; - scrollback-down-page = "Shift+Page_Down Shift+KP_Page_Down"; - # scrollback-down-half-page = "none"; - # scrollback-down-line = "none"; - # scrollback-home = "none"; - # scrollback-end = "none"; - - clipboard-copy = "Control+Shift+c XF86Copy"; - clipboard-paste = "Control+Shift+v XF86Paste"; - primary-paste = "Shift+Insert"; - search-start = "Control+Shift+r"; - - font-increase = "Control+plus Control+equal Control+KP_Add"; - font-decrease = "Control+minus Control+KP_Subtract"; - font-reset = "Control+0 Control+KP_0"; - - spawn-terminal = "Control+Shift+n"; - # minimize = "none"; - # maximize = "none"; - # fullscreen = "none"; - - pipe-visible = "[sh -c \"xurls | fuzzel | xargs -r firefox\"] none"; - pipe-scrollback = "[sh -c \"xurls | fuzzel | xargs -r firefox\"] none"; - pipe-selected = "[xargs -r firefox] none"; - pipe-command-output = "[wl-copy] none"; - - show-urls-launch = "Control+Shift+o"; - # show-urls-copy = "none"; - # show-urls-persistent = "none"; - - prompt-prev = "Control+Shift+z"; - prompt-next = "Control+Shift+x"; - - unicode-input = "Control+Shift+u"; - # color-theme-switch-1 = "none"; - # color-theme-switch-2 = "none"; - color-theme-toggle = "Control+Alt+p"; - - # noop = "none"; - # quit = "none"; - }; - - search-bindings = { - cancel = "Control+g Control+c Escape"; - commit = "Return KP_Enter"; - - find-prev = "Control+r"; - find-next = "Control+s"; - - cursor-left = "Left Control+b"; - cursor-left-word = "Control+Left Mod1+b"; - cursor-right = "Right Control+f"; - cursor-right-word = "Control+Right Mod1+f"; - cursor-home = "Home Control+a"; - cursor-end = "End Control+e"; - - delete-prev = "BackSpace"; - delete-prev-word = "Mod1+BackSpace Control+BackSpace"; - delete-next = "Delete"; - delete-next-word = "Mod1+d Control+Delete"; - delete-to-start = "Control+u"; - delete-to-end = "Control+k"; - - extend-char = "Shift+Right"; - extend-to-word-boundary = "Control+w Control+Shift+Right"; - extend-to-next-whitespace = "Control+Shift+w"; - extend-line-down = "Shift+Down"; - extend-backward-char = "Shift+Left"; - extend-backward-to-word-boundary = "Control+Shift+Left"; - # extend-backward-to-next-whitespace = "none"; - extend-line-up = "Shift+Up"; - - clipboard-paste = "Control+v Control+Shift+v Control+y XF86Paste"; - primary-paste = "Shift+Insert"; - - # unicode-input = "none"; - - scrollback-up-page = "Shift+Page_Up Shift+KP_Page_Up"; - # scrollback-up-half-page = "none"; - # scrollback-up-line = "none"; - scrollback-down-page = "Shift+Page_Down Shift+KP_Page_Down"; - # scrollback-down-half-page = "none"; - # scrollback-down-line = "none"; - # scrollback-home = "none"; - # scrollback-end = "none"; - }; - - url-bindings = { - cancel = "Control+g Control+c Control+d Escape"; - toggle-url-visible = "t"; - }; - - text-bindings = { - "\\x03" = "Mod4+c"; # map Super+c -> Control+c - }; - - mouse-bindings = { - scrollback-up-mouse = "BTN_WHEEL_BACK"; - scrollback-down-mouse = "BTN_WHEEL_FORWARD"; - font-increase = "Control+BTN_WHEEL_BACK"; - font-decrease = "Control+BTN_WHEEL_FORWARD"; - selection-override-modifiers = "Shift"; - primary-paste = "BTN_MIDDLE"; - select-begin = "BTN_LEFT"; - select-begin-block = "Control+BTN_LEFT"; - select-extend = "BTN_RIGHT"; - select-extend-character-wise = "Control+BTN_RIGHT"; - select-word = "BTN_LEFT-2"; - select-word-whitespace = "Control+BTN_LEFT-2"; - select-quote = "BTN_LEFT-3"; - select-row = "BTN_LEFT-4"; - }; - }; - }; -} diff --git a/homes/modules/term/ghostty.nix b/homes/modules/term/ghostty.nix deleted file mode 100644 index 4c0b130..0000000 --- a/homes/modules/term/ghostty.nix +++ /dev/null @@ -1,45 +0,0 @@ -{pkgs, ...}: { - home = { - packages = [ - pkgs.ghostty - ]; - - sessionVariables.TERMINAL = "ghostty"; - }; - - programs.ghostty = { - enable = true; - - settings = { - theme = "Dracula"; - font-family = "Geist Nerd Font"; - font-feature = ["liga" "calt"]; - - window-padding-x = 12; - window-padding-y = 6; - window-theme = "system"; - - window-height = 26; - window-width = 90; - copy-on-select = true; - gtk-single-instance = false; - adw-toolbar-style = "flat"; - - # disable close confirmations - confirm-close-surface = false; - - keybind = [ - "ctrl+shift+plus=increase_font_size:1" - "ctrl+shift+minus=decrease_font_size:1" - - "ctrl+h=goto_split:left" - "ctrl+l=goto_split:right" - ]; - }; - - #themes = { - #aylur-dark = colors (import ./colors.nix {scheme = "dark";}); - #aylur-light = colors (import ./colors.nix {scheme = "light";}); - #}; - }; -} diff --git a/homes/modules/tmux.nix b/homes/modules/tmux.nix deleted file mode 100644 index e5946c0..0000000 --- a/homes/modules/tmux.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.tmux = { - enable = true; - }; -} diff --git a/homes/modules/wm/hypr/hyprland.nix b/homes/modules/wm/hypr/hyprland.nix deleted file mode 100755 index b9ca1f7..0000000 --- a/homes/modules/wm/hypr/hyprland.nix +++ /dev/null @@ -1,43 +0,0 @@ -# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland) -# and your home-manager config (for managing hyprland's config files) -{ - pkgs, - pkgs-unstable, - inputs, - config, - lib, - ... -}: { - options.hyprland = { - enable = lib.mkEnableOption "Hyprland"; - }; - - config = lib.mkIf config.hyprland.enable { - wayland.windowManager.hyprland = { - enable = true; - package = pkgs.hyprland; # pkgs-unstable.hyprland; - - xwayland.enable = true; - - systemd = { - enable = true; - # enable autostart of applications - # REF: `man 8 systemd-xdg-autostart-generator` - enableXdgAutostart = true; - }; - - plugins = with inputs; [ - split-monitor-workspaces.packages.${pkgs.system}.split - ]; - }; - - xdg.portal = { - enable = true; - extraPortals = with pkgs; [ - xdg-desktop-portal-gtk - ]; - }; - - # TODO: finish this - }; -} diff --git a/homes/subspace/default.nix b/homes/subspace/default.nix index c827022..6b1c0fa 100644 --- a/homes/subspace/default.nix +++ b/homes/subspace/default.nix @@ -41,27 +41,12 @@ user = "ae"; port = 22; identityFile = "~/.ssh/id_hyrule"; - setEnv = { - TERM = "linux"; - }; }; - dead = { + YearnForTheMines = { hostname = "deadlyserver.com"; user = "emile"; port = 29843; identityFile = "~/.ssh/id_deadlyserver"; - setEnv = { - TERM = "xterm-256color"; - }; - }; - youcue = { - hostname = "moss.labs.eait.uq.edu.au"; - user = "s4740056"; - port = 22; - identityFile = "~/.ssh/id_youcue"; - setEnv = { - TERM = "xterm-256color"; - }; }; }; }; diff --git a/hosts/hyrule/default.nix b/hosts/hyrule/default.nix index 325e467..11048b6 100755 --- a/hosts/hyrule/default.nix +++ b/hosts/hyrule/default.nix @@ -1,27 +1,28 @@ { pkgs, - pkgs-unstable, inputs, lib, ... }: let home-manager = builtins.fetchTarball { - url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz"; - sha256 = "0d41gr0c89a4y4lllzdgmbm54h9kn9fjnmavwpgw0w9xwqwnzpax"; + url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz"; + sha256 = "0c07xj74vsj37d3a8f98i9rhhhr99ckwlp45n40f0qkmigm3pk8s"; }; in { imports = [ ./hardware-configuration.nix (import "${home-manager}/nixos") - - # ./mailserver.nix # TEMP: location - # ./minecraft-server.nix # TEMP: location - + #../../flakes/wishlist/wishlist.nix #../modules/server/nginx.nix #../modules/server/ssh.nix #../modules/server/fail2ban.nix ]; + # override wishlist with the new cool one! + #pkgs.config.packageOverrides = { + # wishlist = inputs.wishlist.packages.x86_64-linux.wishlist; + #}; + nix.settings = { # make wheel group trusted users allows my "ae" user # to import packages not signed by a trusted key @@ -33,15 +34,6 @@ in { ]; }; - # nixpkgs.config.allowUnfreePredicate = let - # whitelist = map lib.getName [ - # "minecraft-server" - # pkgs.minecraft-server - # pkgs-unstable.minecraft-server - # ]; - # in - # pkg: builtins.elem (lib.getName pkg) whitelist; - time.timeZone = "Australia/Brisbane"; i18n.defaultLocale = "en_US.UTF-8"; @@ -55,9 +47,16 @@ in { targetHost = "imbored.dev"; targetUser = "ae"; targetPort = 22; - sshOptions = [ - "-A" # forward ssh-agent - ]; + # the following line is unnecessary if using an ssh agent + #sshOptions = ["-i /home/me/.ssh/id_hyrule"]; + #keys = { + # "imbored.dev" = { + # # text, keyCommand, or keyFile must be set + # # text = ""; + # #keyCommand = [ "" ]; + # keyFile = "/home/me/.ssh/id_hyrule"; + # }; + #}; buildOnTarget = false; # build locally then deploy }; @@ -85,11 +84,13 @@ in { # 3306 (INTERNAL) forgejo sqlite3 database 5000 # debug (for my job) # 8222 (INTERNAL) vaultwarden - 45000 # minecaft server ]; }; }; + # grant passwordless sudo to wheel group + security.sudo.wheelNeedsPassword = false; + users = { defaultUserShell = pkgs.bash; @@ -97,15 +98,19 @@ in { # primary user ae = { isNormalUser = true; - extraGroups = ["wheel"]; + extraGroups = ["wheel" "networkmanager" "docker"]; shell = pkgs.bash; - openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCsUZY45rgezi+8iROdcR5vPeacJ2fbMjlDijfUrH9hRX2FzCsg/4e3aFKhi2seZMmyTfbstxmDrrH8paUS5TibFgLFBGNngaF3CTjg85i5pm25Hr4IVo31oziBnTWaG6j3buYKtz5e1qSPzXywinJR+5+FCUJU7Fxa+EWTZcOX4wYgArSj4q73rZmvk5N0X44Mudt4nvpD2chvxygsdTzD6ph92qCuaJ/AbfmOoC7b/xvOaOVydUfgDLpHi9VZbd3akvvKxRfW6ZklldgXEzPXKMuastN0mwcBxvIb5G1Vkj8jtSVtKPc5psZ9/NWA5l38xH4qZ6z7eib6thtEMdtcKmTZEEWDADjqTea5Gj61c1n18cr6f3Tff+0bn/cxsl4Y0esi+aDeuCXYiIYNmeKBx0ttDNIxpk4J5Fdh6Xs+AZif5lnJErtu8TPy2aC0bc9wehTjMyvilTHfyerOD1ZJXhN2XwRVDGN7t7leAJZISJlPjqTDcw3Vfvzte/5JqS+FR+hbpG4uz2ix8kUa20u5YF2oSdGl8+zsdozVsdQm10Iv9WSXBV7t4m+oyodgtfzydBpmXq7aBXudCiEKw+7TC7F+1a4YFrVrCNXKFgKUpd1MiVLl7DIbzm5U9MD2BB3Fy7BPCzr3tW6/ExOhhpBWY+HnzVGQfkNr7dRcqfipKw== ae@imbored.dev" + home = "/home/ae"; # TEMP: remove and replace with home-manager + packages = with pkgs; [ ]; }; - # TODO: reduce security implications of subspace - subspace = { + subspace = let + # override + wishlistBash = + pkgs.bash.override { + }; + in { isNormalUser = true; shell = pkgs.bash; home = "/home/subspace"; @@ -113,6 +118,15 @@ in { wishlist ]; }; + + # user for friends to ssh into + friends = { + isNormalUser = true; + shell = pkgs.bash; + home = "/home/friends"; # TEMP: remove and replace with home-manager + packages = with pkgs; [ + ]; + }; }; }; @@ -123,6 +137,7 @@ in { ae = import ../../homes/ae; subspace = import ../../homes/subspace; }; + sharedModules = []; }; services = { @@ -132,61 +147,64 @@ in { # and change forgejo to use 127.0.0.2:22 (use port 22, ONLY change loopback address) nginx = { enable = true; + # in wake of CVE-2022-3602/CVE-2022-3786 package = pkgs.nginxStable.override {openssl = pkgs.libressl;}; - recommendedGzipSettings = true; - recommendedZstdSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; - - # streamConfig = '' - # server { - # listen 127.0.0.1:53 udp reuseport; - # proxy_timeout 20s; - # proxy_pass 192.168.0.1:53535; - # } - # ''; - - virtualHosts = let - localhost = "http://127.0.0.1"; - std = { - # TODO: should I run over QUIC+HTTP3? (experimental) - # quic = true; - # http3 = true; + #virtualHosts."imbored.dev".locations."/" = { + virtualHosts = { + "imbored.dev" = { + # "http:imbored.dev" = { + default = true; + # serverName = "imbored.dev"; + # listenAddresses = ["imbored.dev"]; enableACME = true; - # kTLS = true; # offload TLS to the linux kernel + addSSL = true; # forceSSL = true; + root = "/var/www/imbored"; + #index = "index.html"; + #root = pkgs.writeTextDir "index.html" '' + # + # + # Give me your mittens! + # + # + #''; }; - in { - "imbored.dev" = - { - default = true; - addSSL = true; # not strictly enforced <3 - root = "/var/www/imbored"; - # extraConfig = '' - # error_page 404 /custom_404.html; - # ''; - } - // std; + # "ssh:imbored.dev" = { + # serverName = "imbored.dev"; + # listen = [{ + # addr = "imbored.dev"; + # port= 22; + # }]; + # locations."/".proxyPass = "ssh://127.0.0.1:2222"; + # }; # Route "vault" subdomain to vaultwarden - "vault.imbored.dev" = - { - forceSSL = true; - locations."/".proxyPass = "${localhost}:8222"; - } - // std; + "vault.imbored.dev" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = "http://127.0.0.1:8222"; + }; # Route "forge" subdomain to forgejo - # TODO: use `forgejo.settings.server.ENABLE_ACME` instead? - "forge.imbored.dev" = - { - forceSSL = true; - extraConfig = '' - client_max_body_size 512M; - ''; - locations."/".proxyPass = "${localhost}:3000"; - } - // std; + "forge.imbored.dev" = { + # "https:forge.imbored.dev" = { + #serverName = "forge.imbored.dev"; + #listenAddresses = ["forge.imbored.dev"]; # NOTE: I think this is wrong + enableACME = true; # TODO: maybe use `forgejo.settings.server.ENABLE_ACME` instead? + forceSSL = true; + extraConfig = '' + client_max_body_size 512M; + ''; + locations."/".proxyPass = "http://127.0.0.1:3000"; + }; + # NOTE: would it work if I used "ssh://forge.imbored.dev" and "https://forge.imbored.dev" instead? + # "ssh:forge.imbored.dev" = { + # serverName = "forge.imbored.dev"; + # listen = [{ + # addr = "forge.imbored.dev"; + # port = 22; + # }]; + # locations."/".proxyPass = "ssh://127.0.0.2:22"; + # }; }; }; @@ -194,9 +212,9 @@ in { enable = true; ports = [22]; settings = { - PasswordAuthentication = false; + PasswordAuthentication = true; PermitRootLogin = "no"; - AllowUsers = ["ae" "subspace"]; # DO NOT ALLOW ALL + AllowUsers = ["ae" "subspace"]; # allow all users by default UseDns = true; X11Forwarding = false; }; @@ -216,11 +234,7 @@ in { # hostname to listen for DOMAIN = "https://vault.imbored.dev"; - - # signup policy SIGNUPS_ALLOWED = false; - SIGNUPS_VERIFY = true; - INVITATIONS_ALLOWED = true; }; # https://mynixos.com/nixpkgs/option/services.vaultwarden.environmentFile environmentFile = "/var/lib/vaultwarden/vaultwarden.env"; @@ -313,16 +327,13 @@ in { }; DEFAULT = { - APP_NAME = "tearforge"; - APP_SLOGIN = "but cozy"; - APP_DISPLAY_NAME_FORMAT = "{APP_NAME} ::{APP_SLOGAN}::"; + APP_NAME = "Emile's Forge"; + APP_SLOGIN = "Cozy"; + APP_DISPLAY_NAME_FORMAT = "{APP_NAME}: {APP_SLOGAN}"; }; repository = { DEFAULT_PRIVATE = "private"; # last, private, public - # repo/org created on push to non-existent - ENABLE_PUSH_CREATE_USER = true; - ENABLE_PUSH_CREATE_ORG = false; DEFAULT_PUSH_CREATE_PRIVATE = true; MAX_CREATION_LIMIT = -1; }; @@ -348,8 +359,8 @@ in { }; "ui.meta" = { AUTHOR = "Emile Clark-Boman - emileclarkb"; - DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects! PS do butterflies cry when they're sad?"; - KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,git,forge,forgejo,self-hosted,dobutterfliescry,butterfly,butterflies"; + DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects!"; + KEYWORDS = "emileclarkb,git,forge,forgejo,self-hosted"; }; markdown = { @@ -367,14 +378,15 @@ in { # When set to “true”, the installation page is not accessible. #INSTALL_LOCK = false; - PASSWORD_HASH_ALGO = "argon2"; # ARGON2 BEST ALGO FR!! (default: argon2$2$65536$8$50) + PASSWORD_HASH_ALGO = "argon2"; # ARGON2 BEST ALGO FR!! MIN_PASSWORD_LENGTH = 12; PASSWORD_COMPLEXITY = "lower,upper,digit,spec"; PASSWORD_CHECK_PWN = true; }; service = { - DISABLE_REGISTRATION = true; # toggle for new users + # toggle to create an admin user + DISABLE_REGISTRATION = true; #DEFAULT_USER_IS_RESTRICTED = true; # Forbid login with third-party services (ie github) ALLOW_ONLY_INTERNAL_REGISTRATION = true; @@ -430,38 +442,24 @@ in { }; }; }; - security = { - # accept Lets Encrypt's security policy (for nginx) - acme = { - acceptTerms = true; - # TODO: change this to me@imbored.dev - defaults.email = "eclarkboman@gmail.com"; - }; - - sudo = { - enable = true; - wheelNeedsPassword = true; - }; - # allow SSH keys for passwordless auth - # TODO: DO NOT USE THIS (create my own alternative to colmena) - pam = { - enableSSHAgentAuth = true; - services.sudo.sshAgentAuth = true; # pam_ssh_agent_auth module - }; + # accept Lets Encrypt's security policy (for nginx) + security.acme = { + acceptTerms = true; + # TODO: change this to me@imbored.dev + defaults.email = "eclarkboman@gmail.com"; }; environment.systemPackages = with pkgs; [ - git vim helix + + #wishlist ]; programs = { fish.enable = true; bash = { - completion.enable = true; - interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then @@ -472,5 +470,17 @@ in { }; }; + #systemd.services.wishlist = { + # description = "Single entrypoint for multiple SSH endpoints"; + # wantedBy = ["multi-user.target"]; + # + # serviceConfig = { + # DynamicUser = "yes"; + # ExecStart = "${pkgs.wishlist}/bin/wishlist serve --config /home/$USER/.ssh/config"; + # Restart = "always"; + # RestartSec = "2s"; + # }; + #}; + system.stateVersion = "24.11"; # DO NOT MODIFY } diff --git a/hosts/hyrule/mailserver.nix b/hosts/hyrule/mailserver.nix deleted file mode 100644 index 49274f2..0000000 --- a/hosts/hyrule/mailserver.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - config, - pkgs, - ... -}: { - imports = [ - (builtins.fetchTarball { - url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/nixos-25.05/nixos-mailserver-nixos-25.05.tar.gz"; - sha256 = "0jpp086m839dz6xh6kw5r8iq0cm4nd691zixzy6z11c4z2vf8v85"; - }) - ]; - - # simple-nixos-mailserver - # DOCS: https://nixos-mailserver.readthedocs.io/en/latest - mailserver = { - enable = true; - # stateVersion = 3; - # Manually open the firewall instead - openFirewall = false; - virusScanning = false; # expensive memory usage - - fqdn = "mail.imbored.dev"; - domains = ["imbored.dev"]; - - # NOTE: generate hashes with `mkpasswd -sm bcrypt` - loginAccounts = { - "me@imbored.dev" = { - aliases = ["emile@imbored.dev"]; - hashedPasswordFile = let - CWD = builtins.getEnv "PWD"; - in "${CWD}/secrets/passwd/me"; - }; - }; - - certificateScheme = "acme-nginx"; - }; -} diff --git a/hosts/hyrule/minecraft-server.nix b/hosts/hyrule/minecraft-server.nix deleted file mode 100644 index 43a4efd..0000000 --- a/hosts/hyrule/minecraft-server.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - pkgs, - pkgs-unstable, - ... -}: { - services.minecraft-server = { - enable = true; - package = pkgs-unstable.minecraft-server; # use latest version only! - declarative = true; - - eula = true; - - openFirewall = false; # do this manually instead - - whitelist = { - "SECRET1" = ""; - "SECRET2" = ""; - }; - - # REF: https://minecraft.wiki/w/Server.properties#Java_Edition - serverProperties = { - server-ip = "195.114.14.69"; # listen on all addresses if unset - server-port = 45000; # connection port - "query.port" = 45000; # share game info/advertising information - user-native-transport = true; # Linux packet RX/TX optimizations - - # Users Connections - enforce-secure-profile = true; - online-mode = true; # don't allow unlicensed minecraft accounts to join - prevent-proxy-connections = false; - rate-limit = 0; - - # Server Functionality - enable-status = true; # where the server appears as "online" - hide-online-players = false; - log-ips = true; - pause-when-empty-seconds = 60; # pause server when no player online for x seconds - view-distance = 10; # range: 3-32 - simulation-distance = 10; # range: 3-32 - - # Players - motd = "M&M's Cozycraft Realm <3"; - max-players = 2; - white-list = true; - idle-player-timeout = 0; # never kick idle players - - # Gameplay - gamemode = "survival"; - force-gamemode = true; - difficulty = "normal"; - hardcore = false; - pvp = true; - allow-cheats = true; - - # World - level-name = "M&M's Cozycraft"; # world name - # level-seed = "" # random seed if unset - level-type = "minecraft:normal"; # world generation preset - generate-structures = true; - spawn-monsters = true; - spawn-protection = 0; - }; - jvmOpts = "-Xms2046M -Xmx2046M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10"; - }; -} diff --git a/hosts/imbored/default.nix b/hosts/imbored/default.nix new file mode 100755 index 0000000..df99d85 --- /dev/null +++ b/hosts/imbored/default.nix @@ -0,0 +1,83 @@ +{ + pkgs, + inputs, + lib, + ... +}: let + home-manager = builtins.fetchTarball { + url = "https://github.com/nix-community/home-manager/archive/master.tar.gz"; + sha256 = "19w63qccz78v0spx03911z98w1bvlxvd07hb0ma14a4vdzi4ninj"; + }; +in { + # TODO: + # - add github:charmbracelet/soft-serve + # - add forgejo + + imports = [ + ../modules/server/nginx.nix + ../modules/server/ssh.nix + ../modules/server/fail2ban.nix + ]; + + system.stateVersion = "24.05"; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + time.timeZone = "Australia/Brisbane"; + + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + }; + + boot.loader = { + # TODO + }; + + networking = { + hostName = "imbored"; + networkmanager.enable = true; + firewall.allowedTCPPorts = [ + 22 # sshd + ] + }; + + users = { + defaultUserShell = pkgs.bash; + + users = { + # primary user + dev = { + isNormalUser = true; + extraGroups = ["wheel"]; + shell = pkgs.bash; + packages = with pkgs; [ + ]; + }; + + # user for friends to ssh into + friends = { + isNormalUser = true; + shell = pkgs.bash; + packages = with pkgs; [ + ]; + }; + }; + }; + + #home-manager = { + # users = { + # dev = import ../../homes/dev; + # friends = import ../../homes/friends; + # }; + #}; + + environment.SystemPackages = with pkgs; [ + ]; + + programs = { + }; +} diff --git a/hosts/lolcathost/default.nix b/hosts/lolcathost/default.nix index dbf965d..e8c0989 100755 --- a/hosts/lolcathost/default.nix +++ b/hosts/lolcathost/default.nix @@ -1,67 +1,32 @@ { - lib, pkgs, - pkgs-unstable, inputs, - config, + lib, ... }: let home-manager = builtins.fetchTarball { - url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz"; - sha256 = "1y919cqrlmq0k44rgnacaq4zq37jj4rdh6f2swp6y2jiz28xb0iq"; + url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz"; + sha256 = "15k41il0mvmwyv6jns4z8k6khhmb22jk5gpcqs1paym3l01g6abn"; }; in { imports = [ ./hardware-configuration.nix (import "${home-manager}/nixos") - - ../modules/bashistrans.nix - - ../modules/wm/hyprland.nix - # ../modules/wm/river.nix - ../modules/wm/crywl.nix - - ../modules/steam.nix - ../modules/obsidian.nix - - ../modules/angryoxide.nix - ../modules/flipperzero.nix - ../modules/chameleonultragui.nix + inputs.spicetify-nix.nixosModules.default ]; - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - - nixpkgs.config.allowUnfreePredicate = let - vscext = pkgs.vscode-extensions; - whitelist = with pkgs; - map lib.getName [ - discord - steam - steamcmd - steam-unwrapped - - winbox - - obsidian - gitkraken - - vscode - vscext.ms-dotnettools.csharp - vscext.ms-dotnettools.csdevkit - vscext.github.copilot - vscext.github.copilot-chat - - # XXX: DEBUG - # rider-override - # XXX: DEBUG - - # jetbrains.rider - ]; - in - pkg: builtins.elem (lib.getName pkg) whitelist; + programs.spicetify = let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + hidePodcasts + shuffle # shuffle+ (special characters are sanitized out of extension names) + ]; + #theme = spicePkgs.themes.catppuccin; + #colorScheme = "mocha"; + }; boot.loader = { efi = { @@ -70,104 +35,57 @@ in { }; grub = { efiSupport = true; + #efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work on this system device = "nodev"; - useOSProber = false; + useOSProber = true; }; # GitHub: vinceliuice/grub2-themes grub2-theme = { enable = true; theme = "whitesur"; # stylish, vimix, or whitesur footer = true; - customResolution = "1920x1080"; + customResolution = "1920x1080"; # Optional: Set a custom resolution }; }; + # Set your time zone. time.timeZone = "Australia/Brisbane"; - i18n.defaultLocale = "en_US.UTF-8"; # internationalisation - # Enable initrd hook for virtual console customisation - # aka cool colours when bootting yay!! + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; console = { - enable = true; - earlySetup = true; # initrd pre hook - keyMap = "us"; font = "Lat2-Terminus16"; - # ANSI 24-bit color definitions (theme: dracula) - colors = [ - "21222c" - "ff5555" - "50fa7b" - "f1fa8c" - "bd93f9" - "ff79c6" - "8be9fd" - "f8f8f2" - "6272a4" - "ff6e6e" - "69ff94" - "ffffa5" - "d6acff" - "ff92df" - "a4ffff" - "ffffff" - ]; + keyMap = "us"; + #packages = with pkgs; [ + # nerdfonts + #]; }; - # ----- NETWORKING ----- - networking = { - hostName = "lolcathost"; - networkmanager.enable = true; + # ----- NETWORKING SECTION ----- + networking.hostName = "lolcathost"; + networking.networkmanager.enable = true; - firewall.enable = false; - - # Use CloudFlare's WARP+ 1.1.1.1 DNS service - nameservers = [ - "1.1.1.1#one.one.one.one" - "1.0.0.1#one.one.one.one" - ]; - }; + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + networking.firewall.enable = true; # ----- SERVICES ----- services = { - # systemd-resolved provides network name resolution - # to local processes via a D-Bus interface. - resolved = { - enable = true; - dnssec = "true"; - domains = ["~."]; - # Use CloudFlare's WARP+ 1.1.1.1 DNS service - fallbackDns = [ - "1.1.1.1#one.one.one.one" - "1.0.0.1#one.one.one.one" - ]; - dnsovertls = "true"; - }; - # Set display manager (login screen) displayManager = { # sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects sddm = { enable = true; - wayland.enable = true; # experimental + wayland.enable = true; # enable experimental sddm support for wayland theme = "corners"; }; - defaultSession = - "hyprland" - + ( - if config.programs.hyprland.withUWSM == true - then "-uwsm" - else null - ); + defaultSession = "hyprland"; }; - # dbus = { - # # NOTE: programs.uwsm.enable sets implementation to dbus-broker, - # # NOTE: however this seems to break dbus - # implementation = lib.mkForce "dbus"; - # }; - - # Multimedia Framework - # With backwards compatability for alsa/pulseaudio/jack + # Enable sound + #hardware.pulseaudio.enable = false; pipewire = { enable = true; wireplumber.enable = true; @@ -178,7 +96,7 @@ in { jack.enable = true; }; - # Touchpad support + # Enable touchpad support libinput.enable = true; tumbler.enable = true; # Thunar image thumbnail support @@ -186,159 +104,88 @@ in { }; security.rtkit.enable = true; # I *think* this is for pipewire - # ------- USERS ------- + # allow wheel group to use passwordless sudo users = { - # Using fish as the login shell tends to go very poorly because it isn't - # POSIX compliant, so we default the login shell to Bash instead :) + # using fish as the login shell tends + # to go very poorly because it isn't + # POSIX compliant, so we'll just use + # simple Bash then :) defaultUserShell = pkgs.bash; users = { # literally me fr (personal account) me = { isNormalUser = true; - extraGroups = ["wheel" "netdev" "docker"]; - shell = pkgs.bash; - packages = let - # TODO: can I just do this: https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#url-like-syntax - # instead to use colmena's flake.nix by specifying a rev hash in the flake input? - colmena-src = pkgs.fetchFromGitHub { - owner = "zhaofengli"; - repo = "colmena"; - rev = "47b6414d800c8471e98ca072bc0835345741a56a"; - sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc="; - }; - colmena-latest = pkgs.callPackage "${colmena-src}/package.nix" {}; - in - with pkgs; [ - firefox - nitch - starfetch + extraGroups = ["wheel"]; + shell = pkgs.bash; #pkgs.fish + packages = with pkgs; [ + firefox + nitch + starfetch - colmena-latest - - gitkraken - ]; + # flatpak requires gnome-software + # for graphical applications + flatpak + gnome-software + ]; }; + # user for my professional jobs and stuff + ae = { + isNormalUser = true; + extraGroups = ["wheel"]; + shell = pkgs.bash; #pkgs.fish + packages = with pkgs; [ + ]; + }; + + # # This is the user account for servers + # dev = { + # isNormalUser = true; + # extraGroups = ["wheel"]; + # shell = pkgs.bash; #pkgs.zsh + # packages = with pkgs; [ + # ]; + # }; + # user for friends to ssh into friends = { isNormalUser = true; shell = pkgs.fish; + packages = with pkgs; [ + ]; }; }; }; home-manager = { users.me = import ../../homes/me; - extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;}; sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord inputs.ags.homeManagerModules.default + {nixpkgs.overlays = [inputs.hyprpanel.overlay];} ]; }; - # ---- ENVIRONMENT VARIABLES ---- - environment = { - # always install "dev" derivation outputs - extraOutputsToInstall = ["dev" "man"]; - - sessionVariables = { - # folder names with capitalisation look awful! - XDG_DOWNLOAD_DIR = "$HOME/downloads"; - - # Hint Electrons apps to use Wayland - NIXOS_OZONE_WL = "1"; - }; - }; - # ---- SYSTEM PACKAGES ----- environment.systemPackages = with pkgs; [ # User Environment - # crywl - swww + inputs.swww.packages.${pkgs.system}.swww helvum easyeffects - pavucontrol ani-cli - bluetui wl-clipboard # clipboard for wayland - qbittorrent # torrenting - signal-desktop + hyprpicker (callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners # dependencies for my sddm theme: pkgs.libsForQt5.qt5.qtgraphicaleffects - # Shell - bash - fish - shellcheck + python311 # I use 3.11 since it's in a pretty stable state now + poetry # python dependency management and packaging + + # fish plugins grc # colorise command outputs - moreutils - - # Systems Emulation - qemu # Fellice Bellard's Quick Emulator - # GNU Utils - gnumake - # Binaries - binutils - strace - ltrace - perf-tools # ftrace + perf - radare2 - gdb - hexyl - # ASM - nasm - (callPackage ../packages/x86-manpages {}) - # C Family - gcc - clang - - clang-tools - # Rust - cargo - rustc - # Go - go - # Nim - nim - nimble - # Haskell - ghc - ghcid - haskell-language-server - ormolu - - # Nix - # TODO: once upgraded past Nix-24.07 this line won't be necessary (I think) - # helix will support nixd by default - # SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix - nixd # lsp for nix - nix-prefetch-git - nix-index - - # Python - python312 # I use 3.12 since it's in a pretty stable state now - python314 # also 3.14 for latest features - poetry - # Sage - sageWithDoc # SageMath + HTML Documentation - - # .NET - dotnetCorePackages.dotnet_9.sdk - dotnetCorePackages.dotnet_9.aspnetcore - dotnetCorePackages.dotnet_9.runtime - - openvpn - inetutils - - # security tools - rustscan - nmap - dig - gobuster - nth - zap httpie curlie @@ -346,55 +193,44 @@ in { doggo tldr btop - eza - yazi - lazygit - ripgrep - viddy # modern `watch` command - thefuck - timg # terminal image (sixel) viewer # Pretty necessary git - git-filter-repo brightnessctl acpi - # upower vim - powertop - imagemagick - # "Standard" Unix Commands - file + # Unix Commands wget tree - pstree unzip - unrar-free - lz4 - man-pages - man-pages-posix - - # Cryptography - gnupg - openssl - libargon2 - - # Games - prismlauncher # minecraft ]; + # Enable the use of certain programs programs = { - crywl = { + hyprland = { enable = true; - xwayland.enable = false; - defaultSession = false; - useUnmodifiedDWL = false; + package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; + portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; + + xwayland.enable = true; }; + zsh.enable = true; fish.enable = true; - nix-ld.enable = true; + # I want to use fish as my login shell but it always goes terrible + # cause it isn't POSIX compliant, so instead Bash is my login and + # will just exec fish (^-^) + bash = { + interactiveShellInit = '' + if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + then + shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + fi + ''; + }; # Thunar also uses: `services.tumbler` & `services.gvfs` thunar = { @@ -405,74 +241,57 @@ in { thunar-media-tags-plugin # change metadata for media files ]; }; - - # mozilla's email client - thunderbird.enable = true; }; # ----- FONTS ----- fonts = { enableDefaultPackages = true; # no clue what this line does tbh - packages = with pkgs; - [ - #(nerdfonts.override { - # fonts = [ - # "Cousine" - # "Iosevka" - # "JetBrainsMono" - # ]; - # }) + packages = with pkgs; [ + #(nerdfonts.override { + # fonts = [ + # "Cousine" + # "Iosevka" + # "JetBrainsMono" + # ]; + # }) + nerdfonts + geist-font # for my hyprlock theme - geist-font # for my hyprlock theme - # texlive maintains a noto-emoji flake - texlivePackages.noto-emoji - ] - ++ builtins.filter lib.attrsets.isDerivation ( - builtins.attrValues pkgs.nerd-fonts - ); + # texlive maintains a noto-emoji flake + texlivePackages.noto-emoji + ]; # TODO: change my default fonts fontconfig = { defaultFonts = { - serif = ["Geist"]; # TODO: package Iosevka Etoile since Iosevka isn't a serif font - sansSerif = ["Geist"]; + serif = ["Iosevka"]; # TODO: package Iosevka Etoile since Iosevka isn't a serif font + sansSerif = ["Iosevka "]; monospace = ["Cousine"]; emoji = ["Noto Emoji"]; }; }; }; - documentation = { - enable = true; - doc.enable = true; # install /share/doc packages - man.enable = true; # install manpages - info.enable = true; # install GNU info - dev.enable = true; # install docs intended for developers - nixos = { - enable = true; # install NixOS documentation (ie man -k nix, & nixos-help) - options.splitBuild = true; - # includeAllModules = true; - }; - }; + # Enable the new CLI commands and the flakes as experimental features + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; - virtualisation.docker.enable = true; + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Enable OpenGL hardware = { - graphics = { - enable = true; - enable32Bit = true; - }; - - # opengl = { - # enable = true; - # driSupport = true; - # driSupport32Bit = true; - # } - - bluetooth = { - enable = true; - powerOnBoot = true; - }; + graphics.enable = true; }; # DO NOT MODIFY diff --git a/hosts/modules/angryoxide.nix b/hosts/modules/angryoxide.nix deleted file mode 100644 index ae4faa7..0000000 --- a/hosts/modules/angryoxide.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - environment.systemPackages = with pkgs; [ - (callPackage ../packages/angryoxide {}) - ]; -} diff --git a/hosts/modules/apps/rider.nix b/hosts/modules/apps/rider.nix deleted file mode 100644 index adf8885..0000000 --- a/hosts/modules/apps/rider.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - pkgs, - pkgs-unstable, - ... -}: { - environment.systemPackages = with pkgs; [ - # Ensure latest stable Rider version (not necessarily stable on NixOS) - pkgs-unstable.jetbrains.rider - - # NOTE: Blazor requires a Chromium-based browser - chromium - # arc-browser - - # .NET - dotnetCorePackages.dotnet_9.sdk - dotnetCorePackages.dotnet_9.aspnetcore - dotnetCorePackages.dotnet_9.runtime - - # Mono - mono - # NOTE: nixpkgs-unstable uses .NET8 SDK - # WARNING: nixpkgs-25.05 uses .NET6 SDK (now marked insecure) - pkgs-unstable.msbuild - - # .NET Framework Tools/Services - omnisharp-roslyn - netcoredbg - ]; - - programs.nix-ld = { - enable = true; - libraries = with pkgs; [ - icu - ]; - }; -} diff --git a/hosts/modules/apps/winbox.nix b/hosts/modules/apps/winbox.nix deleted file mode 100644 index eaf8b7c..0000000 --- a/hosts/modules/apps/winbox.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.winbox = { - enable = true; - openFirewall = false; # port: 5678 - }; -} diff --git a/hosts/modules/bashistrans.nix b/hosts/modules/bashistrans.nix deleted file mode 100644 index d3b285c..0000000 --- a/hosts/modules/bashistrans.nix +++ /dev/null @@ -1,23 +0,0 @@ -{pkgs, ...}: { - # I want to use fish as my login shell but it always goes terrible - # cause it isn't POSIX compliant, so instead Bash is my login and - # will just exec fish (^-^) - programs.bash = { - blesh.enable = false; # ble.sh replacement for GNU readline - completion.enable = true; - - interactiveShellInit = '' - # help bash transition into a beautiful fish! - if [[ -z $CRY_BASH_IS_TRANS ]] - then - if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] - then - shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" - exec ${pkgs.fish}/bin/fish $LOGIN_OPTION - fi - fi - # bash is trans now! (no more transitioning required) - export CRY_BASH_IS_TRANS=true - ''; - }; -} diff --git a/hosts/modules/chameleonultragui.nix b/hosts/modules/chameleonultragui.nix deleted file mode 100644 index 6999022..0000000 --- a/hosts/modules/chameleonultragui.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - environment.systemPackages = with pkgs; [ - (callPackage ../packages/chameleonultragui {}) - ]; -} diff --git a/hosts/modules/flipperzero.nix b/hosts/modules/flipperzero.nix deleted file mode 100644 index 7c466ad..0000000 --- a/hosts/modules/flipperzero.nix +++ /dev/null @@ -1,6 +0,0 @@ -{pkgs, ...}: { - environment.systemPackages = with pkgs; [ - # flipper zero desktop app - qflipper - ]; -} diff --git a/hosts/modules/obsidian.nix b/hosts/modules/obsidian.nix deleted file mode 100644 index ed800c3..0000000 --- a/hosts/modules/obsidian.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - environment.systemPackages = with pkgs; [ - obsidian - ]; -} diff --git a/hosts/modules/steam.nix b/hosts/modules/steam.nix deleted file mode 100644 index e554441..0000000 --- a/hosts/modules/steam.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - # nixpkgs.config.allowUnfreePredicate = pkg: - # builtins.elem (lib.getName pkg) [ - # "steam" - # "steam-original" - # "steam-unwrapped" - # "steam-run" - # ]; - nixpkgs.overlays = [ - (self: super: { - lutris = super.lutris.overrideAttrs (final: prev: { - # WARNING: pkgs.mbedtls_2 is marked insecure! - # Replace pkgs.mbedtls_2 (v2.28.10) with pkgs.mbedtls (v3.6.4) - targetPkgs = pkgs: ( - (builtins.filter (p: p != pkgs.mbedtls_2) (prev.targetPkgs pkgs)) - ++ [pkgs.mbedtls] - ); - }); - }) - ]; - - programs = { - steam = { - enable = true; - gamescopeSession.enable = false; # .desktop entry for gamescope - - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - localNetworkGameTransfers.openFirewall = true; - - extraCompatPackages = with pkgs; [ - proton-ge-bin - ]; - }; - - gamemode.enable = true; - }; - - environment.systemPackages = with pkgs; [ - steamcmd - - mangohud - protonup-qt - - # XXX: DEBUG: disable lutris - # XXX: NOTE: pkgs.lutris depends on pkgs.mbedtls_2 which is marked insecure! - # XXX: NOTE: Use the provided overlay to patch pkgs.mbedtls_2 -> pkgs.mbedtls - # lutris - - bottles - heroic - ]; -} diff --git a/hosts/modules/wm/crywl.nix b/hosts/modules/wm/crywl.nix deleted file mode 100644 index 1454af2..0000000 --- a/hosts/modules/wm/crywl.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.programs.crywl; -in { - options.programs.crywl = with lib; { - enable = mkEnableOption "CryWL"; - xwayland.enable = mkEnableOption "XWayland"; - defaultSession = mkEnableOption "CryWL as the default login session"; - - # currently DWL 0.7 (also beware I'll barely ever update the original DWL refs) - useUnmodifiedDWL = mkOption { - type = types.bool; - default = false; - description = "Whether to use unmodified DWL source code (latest stable release)"; - }; - }; - - config = lib.mkIf cfg.enable (let - xwaylandEnabled = cfg.xwayland.enable; - defaultSession = cfg.defaultSession; - useUnmodifiedDWL = cfg.useUnmodifiedDWL; - in { - services.displayManager = { - sessionPackages = [ - pkgs.crywl - ]; - - defaultSession = lib.mkIf defaultSession "crywl"; - }; - - environment.systemPackages = [ - pkgs.crywl - ]; - - nixpkgs.overlays = [ - (self: super: { - crywl = super.dwl.overrideAttrs (oldAttrs: rec { - pname = "crywl"; - version = "0.1-unstable"; - - src = let - dwl_0_70 = { - rev = "74e45c4014ae7048ecbb76eb6f54034b8b479480"; - hash = "sha256-7SoCITrbMrlfL4Z4hVyPpjB9RrrjLXHP9C5t1DVXBBA="; - }; - crywl_unstable = { - rev = "dc1260d3cfd14e8e5b243ec1d3d56e4b08c8c517"; - hash = "sha256-61R+xBYMzeEn93gLofcj8Y3VbJqW6g7GzCTujpAco90="; - }; - in - pkgs.fetchFromGitea ({ - domain = "forge.imbored.dev"; - owner = "emileclarkb"; - repo = pname; - } - // ( - if useUnmodifiedDWL - then dwl_0_70 - else crywl_unstable - )); - - buildInputs = with pkgs; - [ - libinput - xorg.libxcb - libxkbcommon - pixman - wayland - wayland-protocols - wlroots_0_19 - ] - ++ lib.optionals xwaylandEnabled [ - xorg.libX11 - xorg.xcbutilwm - xwayland - ]; - - makeFlags = - [ - "PKG_CONFIG=${pkgs.stdenv.cc.targetPrefix}pkg-config" - "WAYLAND_SCANNER=wayland-scanner" - "PREFIX=$(out)" - "MANDIR=$(man)/share/man" - ] - ++ lib.optionals xwaylandEnabled [ - ''XWAYLAND="-DXWAYLAND"'' - ''XLIBS="xcb xcb-icccm.pc"'' - ]; - - # Ensure `crywl.desktop` entry is registered - passthru = { - providedSessions = [pname]; - - tests.version = pkgs.testers.testVersion { - package = oldAttrs.finalPackage; - # `dwl -v` emits its version string to stderr and returns 1 - command = "crywl -v 2>&1; return 0"; - }; - }; - meta = { - homepage = "https://forge.imbored.dev/emileclarkb/crywl"; - description = "Personal fork of DWL"; - license = lib.licenses.gpl3Only; - maintainers = [lib.maintainers.emileclarkb]; - inherit (pkgs.wayland.meta) platforms; - mainProgram = "crywl"; - }; - }); - }) - ]; - }); -} diff --git a/hosts/modules/wm/hyprland.nix b/hosts/modules/wm/hyprland.nix deleted file mode 100644 index c83caa1..0000000 --- a/hosts/modules/wm/hyprland.nix +++ /dev/null @@ -1,13 +0,0 @@ -{pkgs, ...}: { - environment.defaultPackages = with pkgs; [ - hyprsunset - ]; - - programs = { - hyprland = { - enable = true; - withUWSM = true; # Universal Wayland Session Manager - xwayland.enable = true; - }; - }; -} diff --git a/hosts/modules/wm/river.nix b/hosts/modules/wm/river.nix deleted file mode 100644 index 02721cc..0000000 --- a/hosts/modules/wm/river.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs = { - river.enable = true; - }; -} diff --git a/hosts/myputer/default.nix b/hosts/myputer/default.nix index 6986a31..73d2eb1 100755 --- a/hosts/myputer/default.nix +++ b/hosts/myputer/default.nix @@ -1,167 +1,87 @@ { - lib, pkgs, - pkgs-unstable, inputs, - config, + lib, + wishlist, ... }: let home-manager = builtins.fetchTarball { - url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz"; - sha256 = "0q3lv288xlzxczh6lc5lcw0zj9qskvjw3pzsrgvdh8rl8ibyq75s"; + url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz"; + sha256 = "1dga3vsd60v9mfyhwgbil13mrchw5crbpgh4zjw9fghv1vyk89vq"; }; in { imports = [ ./hardware-configuration.nix (import "${home-manager}/nixos") - - ../modules/bashistrans.nix - - ../modules/wm/hyprland.nix - - ../modules/steam.nix - - ../modules/obsidian.nix - ../modules/apps/rider.nix - ../modules/apps/winbox.nix - - #../modules/flipperzero.nix - #../modules/chameleonultragui.nix + inputs.spicetify-nix.nixosModules.default ]; - nix.settings = { - experimental-features = [ - "nix-command" - "flakes" + programs.spicetify = let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + hidePodcasts + shuffle # shuffle+ (special characters are sanitized out of extension names) ]; - download-buffer-size = 524288000; # 500 MiB + #theme = spicePkgs.themes.catppuccin; + #colorScheme = "mocha"; }; - # nixpkgs.overlays = [ - # (self: super: { - # jdk17 = super.jdk17.override (prev: { - # enableJavaFX = true; - # }); - # }) - # ]; - - nixpkgs.config.allowUnfreePredicate = let - vscext = pkgs.vscode-extensions; - whitelist = with pkgs; - map lib.getName [ - discord - steam - steamcmd - steam-unwrapped - - winbox - - obsidian - gitkraken - - vscode - vscext.ms-dotnettools.csharp - vscext.ms-dotnettools.csdevkit - vscext.github.copilot - vscext.github.copilot-chat - - # XXX: DEBUG - # rider-override - # XXX: DEBUG - - # jetbrains.rider - ]; - in - pkg: builtins.elem (lib.getName pkg) whitelist; + boot.loader.systemd-boot.enable = false; boot.loader = { efi = { canTouchEfiVariables = true; - efiSysMountPoint = "/boot/efi"; + efiSysMountPoint = "/boot/efi"; #/boot/efi }; grub = { efiSupport = true; + #efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work on this system device = "nodev"; - # useOSProber = true; + #useOSProber = true; }; - # GitHub: vinceliuice/grub2-themes grub2-theme = { enable = true; theme = "whitesur"; # stylish, vimix, or whitesur footer = true; - # TODO: switch my cables to switch default grub display - customResolution = "3840x2160"; + customResolution = "1920x1080"; }; }; + # Set your time zone. time.timeZone = "Australia/Brisbane"; - i18n.defaultLocale = "en_US.UTF-8"; # internationalisation - # Enable initrd hook for virtual console customisation - # aka cool colours when bootting yay!! + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; console = { - enable = true; - earlySetup = true; # initrd pre hook - keyMap = "us"; font = "Lat2-Terminus16"; - # ANSI 24-bit color definitions (theme: dracula) - colors = [ - "21222c" - "ff5555" - "50fa7b" - "f1fa8c" - "bd93f9" - "ff79c6" - "8be9fd" - "f8f8f2" - "6272a4" - "ff6e6e" - "69ff94" - "ffffa5" - "d6acff" - "ff92df" - "a4ffff" - "ffffff" - ]; + keyMap = "us"; }; - # ----- NETWORKING ----- - networking = { - hostName = "myputer"; - networkmanager.enable = true; + # ----- NETWORKING SECTION ----- + networking.hostName = "myputer"; + networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - firewall = { - enable = true; - allowedTCPPorts = [ - 22 # SSH - 80 # HTTP - 443 # HTTPS - 5678 # MikroTik WinBox - 25565 # Minecraft LAN - ]; - }; - }; + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + networking.firewall.enable = true; # ----- SERVICES ----- services = { # Set display manager (login screen) displayManager = { - # sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects sddm = { enable = true; - wayland.enable = true; # experimental + wayland.enable = true; # enable experimental sddm support for wayland theme = "corners"; }; - defaultSession = - "hyprland" - + ( - if config.programs.hyprland.withUWSM - then "-uwsm" - else null - ); + defaultSession = "hyprland"; }; - # Multimedia Framework - # With backwards compatability for alsa/pulseaudio/jack + # Enable sound pipewire = { enable = true; wireplumber.enable = true; @@ -177,19 +97,21 @@ in { }; security.rtkit.enable = true; # I *think* this is for pipewire - # ------- USERS ------- + # allow wheel group to use passwordless sudo security.sudo.wheelNeedsPassword = false; users = { - # Using fish as the login shell tends to go very poorly because it isn't - # POSIX compliant, so we default the login shell to Bash instead :) + # using fish as the login shell tends + # to go very poorly because it isn't + # POSIX compliant, so we'll just use + # simple Bash then :) defaultUserShell = pkgs.bash; users = { # just me fr (personal account) me = { isNormalUser = true; - extraGroups = ["wheel" "netdev" "docker"]; - shell = pkgs.bash; + extraGroups = ["wheel" "docker"]; + shell = pkgs.bash; #pkgs.fish packages = let # TODO: can I just do this: https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#url-like-syntax # instead to use colmena's flake.nix by specifying a rev hash in the flake input? @@ -199,14 +121,18 @@ in { rev = "47b6414d800c8471e98ca072bc0835345741a56a"; sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc="; }; - colmena-latest = pkgs.callPackage "${colmena-src}/package.nix" {}; + colmena-new = pkgs.callPackage "${colmena-src}/package.nix" {}; in with pkgs; [ firefox nitch starfetch - colmena-latest + # flatpak requires gnome-software + flatpak + gnome-software + + colmena-new gitkraken # NOTE: downloadthing this causes my PC to freak!! ("too many open files" error) @@ -218,177 +144,83 @@ in { ae = { isNormalUser = true; extraGroups = ["wheel"]; - shell = pkgs.bash; + shell = pkgs.bash; #pkgs.fish + packages = with pkgs; [ + ]; }; }; }; home-manager = { users.me = import ../../homes/me; - extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;}; sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord inputs.ags.homeManagerModules.default + {nixpkgs.overlays = [inputs.hyprpanel.overlay];} ]; }; - # ---- ENVIRONMENT VARIABLES ---- - environment = { - # always install "dev" derivation outputs - extraOutputsToInstall = ["dev" "man"]; + # set environment variables + environment.sessionVariables = { + # folder names with capitalisation look awful! + XDG_DOWNLOAD_DIR = "$HOME/downloads"; - sessionVariables = { - # folder names with capitalisation look awful! - XDG_DOWNLOAD_DIR = "$HOME/downloads"; - - # Hint Electrons apps to use Wayland - NIXOS_OZONE_WL = "1"; - }; + # Hint Electrons apps to use Wayland + NIXOS_OZONE_WL = "1"; }; # ---- SYSTEM PACKAGES ----- environment.systemPackages = with pkgs; [ # User Environment - swww + inputs.swww.packages.${pkgs.system}.swww helvum easyeffects pavucontrol ani-cli - bluetui wl-clipboard # clipboard for wayland hyprpicker - hyprshot # screenshot utility - qbittorrent - signal-desktop - kdePackages.gwenview # image viewer - libreoffice - # TEST: WARNING - # ospd-openvas - # openvas-scanner - # openvas-smb - - (callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners + #(callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners # dependencies for my sddm theme: pkgs.libsForQt5.qt5.qtgraphicaleffects - # Shell - bash - fish - shellcheck + python311 # I use 3.11 since it's in a pretty stable state now + poetry # python dependency management and packaging + + nixd # lsp for nix + + neofetch # TODO: remove (installed to debug something) + + # fish plugins grc # colorise command outputs - moreutils - - # Systems Programming & Compilation - qemu # Fellice Bellard's Quick Emulator - # GNU Utils - gnumake - # Binaries - binutils - strace - ltrace - perf-tools # ftrace + perf - radare2 - gdb - # ASM - nasm - (callPackage ../packages/x86-manpages {}) - # C Family - gcc - clang - clang-tools - - # Rust - cargo - rustc - # Go - go - # Nim - nim - nimble - # Haskell - ghc - ghcid - haskell-language-server - ormolu - - # Java - # jdk17 - # (jre8.overrideAttrs - # (oldAttrs: { - # enableJavaFX = true; - # })) - # (jdk8.overrideAttrs - # (oldAttrs: { - # enableJavaFX = true; - # })) - visualvm - - # Python - python312 # I use 3.12 since it's in a pretty stable state now - python314 # also 3.14 for latest features - poetry - # Sage - sageWithDoc # SageMath + HTML Documentation - - openvpn - inetutils - - # security tools - rustscan - nmap - dig - gobuster - nth - zap httpie curlie zoxide doggo tldr - # btop - eza - yazi - lazygit - ripgrep - viddy # modern `watch` command - thefuck + #btop tesseract # for my work with Agribit - # TODO: once upgraded past Nix-24.07 this line won't be necessary (I think) - # helix will support nixd by default - # SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix - # nixd # lsp for nix # DEBUG + # TODO: remove this and host my nix flake on github instead + #wishlist # Pretty necessary git - git-filter-repo - nix-prefetch-git brightnessctl acpi vim - powertop - imagemagick + nix-prefetch-git - # "Standard" Unix Commands - file + # Unix Commands wget tree - pstree unzip - unrar-free - lz4 - man-pages - man-pages-posix # Cryptography - gnupg openssl libargon2 - - # Games - prismlauncher # minecraft ]; # DEBUG: configuring xdg portal here instead? @@ -407,12 +239,20 @@ in { # ]; #}; + # Enable the use of certain programs programs = { + hyprland = { + enable = true; + # TODO: uncomment, I did this when hyprland wasn't working + #package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; + #portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; + + xwayland.enable = true; + }; + zsh.enable = true; fish.enable = true; - nix-ld.enable = true; - neovim = { enable = true; defaultEditor = true; @@ -427,7 +267,20 @@ in { }; }; - # Thunar also (optionally) requires: `services.tumbler` & `services.gvfs` + # I want to use fish as my login shell but it always goes terrible + # cause it isn't POSIX compliant, so instead Bash is my login and + # will just exec fish (^-^) + bash = { + interactiveShellInit = '' + if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + then + shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + fi + ''; + }; + + # Thunar also users: `services.tumbler` & `services.gvfs` thunar = { enable = true; plugins = with pkgs.xfce; [ @@ -439,45 +292,32 @@ in { # mozilla's email client thunderbird.enable = true; - - java = let - # XXX: WARNING: TEST :WARNING: XXX - # Test for CrazyCraft VoidLauncher - myjdk = pkgs.jdk17.override { - enableJavaFX = true; - # openjfx_jdk = pkgs.openjfx17.override {withWebKit = true;}; - }; - in { - enable = true; - package = myjdk; - }; }; # ----- FONTS ----- fonts = { enableDefaultPackages = true; # no clue what this line does tbh - packages = with pkgs; - [ - # (nerdfonts.override { - # fonts = [ - # "Cousine" # its ok i guess - # "Iosevka" # nah nah - # "IosevkaTerm" # big nah - # "CascadiaCode" # potential - # "FiraCode" # potential - # "JetBrainsMono" # for my rofi theme - # "Hasklig" - # "Hack" - # ]; - # }) + packages = with pkgs; [ + /* + (nerdfonts.override { + fonts = [ + "Cousine" # its already i guess + "Iosevka" # nah nah + "IosevkaTerm" # big nah + "CascadiaCode" # potential + "FiraCode" # potential + "JetBrainsMono" # for my rofi theme + "Hasklig" + "Hack" + ]; + }) + */ + nerdfonts + geist-font # for my hyprlock theme - geist-font # for my hyprlock theme - # texlive maintains a noto-emoji flake - texlivePackages.noto-emoji - ] - ++ builtins.filter lib.attrsets.isDerivation ( - builtins.attrValues pkgs.nerd-fonts - ); + # texlive maintains a noto-emoji flake + texlivePackages.noto-emoji + ]; # TODO: change my default fonts fontconfig = { @@ -490,37 +330,28 @@ in { }; }; - documentation = { - enable = true; - doc.enable = true; # install /share/doc packages - man.enable = true; # install manpages - info.enable = true; # install GNU info - dev.enable = true; # install docs intended for developers - nixos = { - enable = true; # install NixOS documentation (ie man -k nix, & nixos-help) - options.splitBuild = true; - # includeAllModules = true; - }; - }; + # Enable the new CLI commands and the flakes as experimental features + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; virtualisation.docker.enable = true; + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + #programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + #}; + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Enable OpenGL hardware = { - graphics = { - enable = true; - enable32Bit = true; - }; - - # opengl = { - # enable = true; - # driSupport = true; - # driSupport32Bit = true; - # } - - bluetooth = { - enable = true; - powerOnBoot = true; - }; + graphics.enable = true; }; # DO NOT MODIFY diff --git a/hosts/packages/README b/hosts/packages/README deleted file mode 100644 index e6e892c..0000000 --- a/hosts/packages/README +++ /dev/null @@ -1,5 +0,0 @@ -This directory (`hosts/packages`) contains custom package derivations, and differs -from `hosts/modules/` which contains importable modules for my nixdots. - -Often each package I write will have a corresponding module that simply -calls `pkgs.callPackage` to install the derivation to the system environment. diff --git a/hosts/packages/angryoxide/default.nix b/hosts/packages/angryoxide/default.nix deleted file mode 100644 index 7610848..0000000 --- a/hosts/packages/angryoxide/default.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ - pkgs, - lib, - ... -}: let - # shared/global properties - angryoxide-owner = "Ragnt"; - angryoxide-pname = "AngryOxide"; - angryoxide-version = "0.8.32"; - angryoxide-meta = { - homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}"; - license = lib.licenses.gpl3; - maintainers = [lib.maintainers.emileclarkb]; - }; - - # "Vendored LibWifi used in AngryOxide" - angryoxide-libwifi-src = pkgs.fetchFromGitHub { - owner = angryoxide-owner; - repo = "libwifi"; - # this specific revision is requested (by rev "e1352..." of AngryOxide) - rev = "71268e1898ad88b8b5d709e186836db417b33e81"; - sha256 = "0af9y7bvr3rban6bslsd9smrvibfp1b7d4nfw7wkdxfp49kx6zyr"; - }; - - # Using `mkDerivation` not `buildRustPackage` because - # AngryOxide uses Git submodules for a patched version of "LibWifi", - # and these aren't moved into `/build/source/libs/` for the `buildPhase`. - # Simply fix right? Well no I can't override `buildPhase`... - angryoxide-src = pkgs.stdenv.mkDerivation rec { - pname = "${angryoxide-pname}-source"; - version = angryoxide-version; - - src = pkgs.fetchFromGitHub { - owner = "Ragnt"; - repo = pname; - rev = "e1352c8aad370efa8db69d175686e4353c6002bd"; - sha256 = "07nhvy7kp7z4y0fdslv56pw7kz6idcpma42f4hyilrmazjbbjmja"; - # clone git submodules (needed for the rust workspace libs) - fetchSubmodules = true; - }; - - buildPhase = '' - # ensure $out and /libwifi paths exist - mkdir -p $out/libs/libwifi - # copy only the necessary source files - cp Cargo.toml Cargo.lock $out/ - cp -r $src/.cargo $src/assets $src/completions $src/libs $src/src $out/ - # ensure libwifi submodule is copied to the build environment - cp -r ${angryoxide-libwifi-src}/. $out/libs/libwifi/ - ''; - - installPhase = let - # SOURCE - completionScriptBash = "completions/bash_angry_oxide_completions"; - # DESTINATION - completionDirBash = "$out/share/bash-completion/completions"; - in '' - # mkdir -p $out/bin - #mkdir $out/bin - #cp target/release/angryoxide $out/bin - - # add bash completions - #mkdir -p ${completionDirBash} - #cp ${completionScriptBash} ${completionDirBash}/angryoxide - ''; - - meta = - { - description = "AngryOxide's source files isolated by (@emileclarkb) into a separate Nix derivation."; - } - // angryoxide-meta; - }; -in - pkgs.rustPackages.rustPlatform.buildRustPackage { - pname = angryoxide-pname; - version = angryoxide-version; - src = angryoxide-src; - cargoHash = "sha256-mry4l0a7DZOWkrChU40OVRCBjKwI39cyZtvEBA5tro0="; - meta = - { - description = "802.11 Attack Tool"; - } - // angryoxide-meta; - } diff --git a/hosts/packages/chameleonultragui/TODO b/hosts/packages/chameleonultragui/TODO deleted file mode 100644 index 5b49da7..0000000 --- a/hosts/packages/chameleonultragui/TODO +++ /dev/null @@ -1 +0,0 @@ -- [ ] Try using `gitHashes` argument instead of patching? (on chameleonultragui package) diff --git a/hosts/packages/chameleonultragui/default.nix b/hosts/packages/chameleonultragui/default.nix deleted file mode 100644 index 0aa10ec..0000000 --- a/hosts/packages/chameleonultragui/default.nix +++ /dev/null @@ -1,483 +0,0 @@ -{ - pkgs, - lib, - makeDesktopItem, - copyDesktopItems, - ... -}: -# ChameleonUltraGUI requires flutter sdk >3.0.0 -pkgs.flutter324.buildFlutterApplication -rec { - pname = "ChameleonUltraGUI"; - version = "1.1.2"; - - src = pkgs.fetchFromGitHub { - owner = "GameTec-live"; - repo = "ChameleonUltraGUI"; - sha256 = "1mb6wkqk6vaamrhflfhsgp5gvqiw2qkvmy7j65abcx7sn5990i27"; - rev = "11424abaccb4a010fcbeab9799ae8f675d8afe99"; - }; - - desktopItems = [ - (makeDesktopItem { - name = pname; - desktopName = pname; - genericName = pname; - - icon = "chameleonultragui"; - comment = meta.description; - - exec = "chameleonultragui %u"; - type = "Application"; - terminal = false; - - categories = ["Utility"]; - keywords = [ - "Flutter" - "share" - "files" - "chameleon" - "chameleonultra" - "chameleonlite" - ]; - }) - ]; - - # path to application within fetched sources - sourceRoot = "source/chameleonultragui"; - - buildInputs = [ - pkgs.imagemagick # creating mipmaps for share/icons - pkgs.yj # converting pubspec.lock yaml->json - ]; - - nativeBuildInputs = [ - copyDesktopItems - ]; - - buildArguments = ["--release"]; - - # source files compile with Flutter >3.29.0 but this - # derivation uses 3.24.0 (so we patch for compatability) - postPatch = let - argbPatch = '' - --- general.dart.old 2025-05-11 15:59:51.812132078 +1000 - +++ general.dart 2025-05-11 15:58:14.755856407 +1000 - @@ -211,7 +211,7 @@ - } - - String colorToHex(Color color) { - - return '#\''${color.toARGB32().toRadixString(16).padLeft(8, '0').substring(2)}'; - + return '#\''${color.value.toRadixString(16).padLeft(8, '0').substring(2)}'; - } - - Color hexToColor(String hex) { - ''; - in '' - # patch source files using Color.toARGB32 method (not defined in Flutter 3.24) - argbPatch="${argbPatch}" - patch lib/helpers/general.dart <(echo "$argbPatch") - ''; - - postInstall = '' - # create mipmaps of desktop logo - logoOriginal="assets/logo-color-desktop.png" - for i in 16 32 64 128 256 512; do - res="$i"x"$i" - d="$out"/share/icons/hicolor/"$res"/apps - mkdir -p $d - ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $d/chameleonultragui.png - done - ''; - - # Nix doesn't natively have a fromYAML function (so I made this instead) - pubspecLock = let - appRoot = "${src}/chameleonultragui"; - - # when generating patch files use -u flag and then - # make sure to escape all " characters for Nix string - pubspecLockPatch = '' - --- pubspec.lock.bak2025-05-10 15:42:44.287730979 +1000 - +++ pubspec.lock2025-05-10 15:41:23.778480048 +1000 - @@ -5,18 +5,23 @@ - dependency: transitive - description: - name: _fe_analyzer_shared - - sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 - + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 - url: \"https://pub.dev\" - source: hosted - - version: \"80.0.0\" - + version: \"72.0.0\" - + _macros: - + dependency: transitive - + description: dart - + source: sdk - + version: \"0.3.2\" - analyzer: - dependency: transitive - description: - name: analyzer - - sha256: \"192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e\" - + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 - url: \"https://pub.dev\" - source: hosted - - version: \"7.3.0\" - + version: \"6.7.0\" - archive: - dependency: \"direct main\" - description: - @@ -37,26 +42,26 @@ - dependency: \"direct main\" - description: - name: async - - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 - + sha256: \"947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c\" - url: \"https://pub.dev\" - source: hosted - - version: \"2.12.0\" - + version: \"2.11.0\" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - - sha256: \"8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea\" - + sha256: \"6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66\" - url: \"https://pub.dev\" - source: hosted - - version: \"2.1.2\" - + version: \"2.1.1\" - characters: - dependency: transitive - description: - name: characters - - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - + sha256: \"04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.4.0\" - + version: \"1.3.0\" - checked_yaml: - dependency: transitive - description: - @@ -77,18 +82,18 @@ - dependency: transitive - description: - name: clock - - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: \"https://pub.dev\" - source: hosted - - version: \"1.1.2\" - + version: \"1.1.1\" - collection: - dependency: \"direct main\" - description: - name: collection - - sha256: \"2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76\" - + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: \"https://pub.dev\" - source: hosted - - version: \"1.19.1\" - + version: \"1.18.0\" - convert: - dependency: \"direct main\" - description: - @@ -157,10 +162,10 @@ - dependency: transitive - description: - name: fake_async - - sha256: \"6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc\" - + sha256: \"511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.3.2\" - + version: \"1.3.1\" - ffi: - dependency: \"direct main\" - description: - @@ -196,11 +201,10 @@ - file_saver: - dependency: \"direct main\" - description: - - path: \".\" - - ref: fix-windows - - resolved-ref: \"3038d74d5560dcca528423fffd745abf31eb88ae\" - - url: \"https://github.com/Foxushka/file_saver.git\" - - source: git - + name: file_saver - + sha256: \"017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e\" - + url: \"https://pub.dev\" - + source: hosted - version: \"0.2.14\" - fixnum: - dependency: transitive - @@ -234,11 +238,10 @@ - flutter_libserialport: - dependency: \"direct main\" - description: - - path: \".\" - - ref: main - - resolved-ref: \"6740aae075505a220a98492910b090824efc7910\" - - url: \"https://github.com/NeariX67/flutter_libserialport.git\" - - source: git - + name: flutter_libserialport - + sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336 - + url: \"https://pub.dev\" - + source: hosted - version: \"0.5.0\" - flutter_lints: - dependency: \"direct dev\" - @@ -347,18 +350,18 @@ - dependency: transitive - description: - name: leak_tracker - - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec - + sha256: \"3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05\" - url: \"https://pub.dev\" - source: hosted - - version: \"10.0.8\" - + version: \"10.0.5\" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 - + sha256: \"932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806\" - url: \"https://pub.dev\" - source: hosted - - version: \"3.0.9\" - + version: \"3.0.5\" - leak_tracker_testing: - dependency: transitive - description: - @@ -399,14 +402,22 @@ - url: \"https://pub.dev\" - source: hosted - version: \"1.3.0\" - + macros: - + dependency: transitive - + description: - + name: macros - + sha256: \"0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536\" - + url: \"https://pub.dev\" - + source: hosted - + version: \"0.1.2-main.4\" - matcher: - dependency: transitive - description: - name: matcher - - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: \"https://pub.dev\" - source: hosted - - version: \"0.12.17\" - + version: \"0.12.16+1\" - material_color_utilities: - dependency: transitive - description: - @@ -419,10 +430,10 @@ - dependency: transitive - description: - name: meta - - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c - + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 - url: \"https://pub.dev\" - source: hosted - - version: \"1.16.0\" - + version: \"1.15.0\" - mobile_scanner: - dependency: \"direct main\" - description: - @@ -467,10 +478,10 @@ - dependency: \"direct main\" - description: - name: path - - sha256: \"75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5\" - + sha256: \"087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.9.1\" - + version: \"1.9.0\" - path_provider: - dependency: transitive - description: - @@ -723,15 +734,15 @@ - dependency: transitive - description: flutter - source: sdk - - version: \"0.0.0\" - + version: \"0.0.99\" - source_span: - dependency: transitive - description: - name: source_span - - sha256: \"254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c\" - + sha256: \"53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.10.1\" - + version: \"1.10.0\" - sprintf: - dependency: transitive - description: - @@ -744,42 +755,42 @@ - dependency: transitive - description: - name: stack_trace - - sha256: \"8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1\" - + sha256: \"73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.12.1\" - + version: \"1.11.1\" - stream_channel: - dependency: transitive - description: - name: stream_channel - - sha256: \"969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d\" - + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: \"https://pub.dev\" - source: hosted - - version: \"2.1.4\" - + version: \"2.1.2\" - string_scanner: - dependency: transitive - description: - name: string_scanner - - sha256: \"921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43\" - + sha256: \"556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.4.1\" - + version: \"1.2.0\" - term_glyph: - dependency: transitive - description: - name: term_glyph - - sha256: \"7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e\" - + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: \"https://pub.dev\" - source: hosted - - version: \"1.2.2\" - + version: \"1.2.1\" - test_api: - dependency: transitive - description: - name: test_api - - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd - + sha256: \"5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb\" - url: \"https://pub.dev\" - source: hosted - - version: \"0.7.4\" - + version: \"0.7.2\" - typed_data: - dependency: transitive - description: - @@ -855,12 +866,11 @@ - usb_serial: - dependency: \"direct main\" - description: - - path: \".\" - - ref: fix-usbserial - - resolved-ref: \"9fcbacc92bec19ea02d33a40d9f39e45d19cf637\" - - url: \"https://github.com/Foxushka/usbserial.git\" - - source: git - - version: \"0.5.1\" - + name: usb_serial - + sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07 - + url: \"https://pub.dev\" - + source: hosted - + version: \"0.5.2\" - uuid: - dependency: \"direct main\" - description: - @@ -881,10 +891,10 @@ - dependency: transitive - description: - name: vm_service - - sha256: \"0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14\" - + sha256: \"5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d\" - url: \"https://pub.dev\" - source: hosted - - version: \"14.3.1\" - + version: \"14.2.5\" - wakelock_plus: - dependency: \"direct main\" - description: - @@ -958,5 +968,5 @@ - source: hosted - version: \"2.2.1\" - sdks: - - dart: \">=3.7.0-0 <4.0.0\" - + dart: \">=3.5.0 <4.0.0\" - flutter: \">=3.24.0\" - ''; - in - builtins.fromJSON - ( - builtins.readFile (pkgs.runCommand "${pname}-buildenv" { - inputs = [ - # DEBUG (both lines commented) - #pkgs.flutter324 # ChameleonUltraGUI requires sdk >3.0.0 - #pkgs.yj - ]; - } '' - # copy source files to a temporary path to rebuild the lockfile - buildPath=$(mktemp -d) - cp -r "${appRoot}/." "$buildPath/" - - outPubspecLock="$buildPath/pubspec.lock" - # MUST define variables to use multiline Nix string in bash scripting - pubspecLockPatch="${pubspecLockPatch}" - - # apply the pubspec.yaml patch and regenerate lock file - # (create a temporary home directory for flutter to play in) - #(cd $buildPath && chmod -R +w . \ - # && patch ./pubspec.yaml <(echo "$pubspecYamlPatch") \ - # && export HOME=$(mktemp -d) \ - # && flutter --disable-analytics \ - # && flutter config --no-cli-animations \ - # && ${pkgs.flutter}/bin/flutter pub get) - - # patch the lockfile - chmod +w $outPubspecLock - patch $outPubspecLock <(echo "$pubspecLockPatch") - - # convert new lockfile to json and return - ${pkgs.yj}/bin/yj < "$buildPath/pubspec.lock" > $out - '') - ); - - # TODO: try this instead of patching - # gitHashes = { - # dartssh2 = "sha256-2pypKwurziwGLZYuGaxlS2lzN3UvJp3bRTvvYYxEqRI="; - # hotkey_manager_linux = "sha256-aO0h94YZvgV/ggVupNw8GjyZsnXrq3qTHRDtuhNv3oI="; - # system_info2 = "sha256-fly7E2vG+bQ/+QGzXk+DYba73RZccltdW2LpZGDKX60="; - # tray_menu = "sha256-riiAiBEms+9ARog8i+MR1fto1Yqx+gwbBWyNbNq6VTM="; - # window_size = "sha256-71PqQzf+qY23hTJvcm0Oye8tng3Asr42E2vfF1nBmVA="; - # xterm = "sha256-h8vIonTPUVnNqZPk/A4ZV7EYCMyM0rrErL9ZOMe4ZBE="; - # }; - - meta = with lib; { - description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; - homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; - license = licenses.gpl3; - maintainers = [maintainers.emileclarkb]; - platforms = platforms.linux; - }; -} -# find /nix/store -type f -print 2>/dev/null | rg "share/applications" -# NOTE: this command will show that there the desktop file was generated -# at some point. just not anymore?? -# NOTE2: read over ~/workshop/packaging/nixpkgs-24.11/pkgs/build-support/make-desktopitem/default.nix -# and see exactly how makeDesktopItem is defined! -# perhaps the item is added to the build environment but not the output? -# NOTE: see how it builds derivations for the desktop and makes the desktop items? -# (every time I build it does actually make the desktop items) -# HOWEVER I just dont think they're being copied over... -# /nix/store/4hqs6dkxqngi6wi95dmizbvmgm7l5cf0-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop -# /nix/store/869gy031lf243k0x9ir7gmrsfksipca1-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop -# /nix/store/adqq7slakkhpjc4hln19jd6p22cc9ci6-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop -# /nix/store/x9fa3na0is70h4ya4dbfsivk4m3mab57-ChameleonUltraGUI.desktop/share/applications/ChameleonUltraGUI.desktop - diff --git a/hosts/packages/chameleonultragui/default.nix.bak1 b/hosts/packages/chameleonultragui/default.nix.bak1 deleted file mode 100644 index 158877a..0000000 --- a/hosts/packages/chameleonultragui/default.nix.bak1 +++ /dev/null @@ -1,474 +0,0 @@ -{ - pkgs, - lib, - ... -}: -# ChameleonUltraGUI requires flutter sdk >3.0.0 -pkgs.flutter324.buildFlutterApplication -(self: { - pname = "ChameleonUltraGUI"; - version = "1.1.2"; - - src = pkgs.fetchFromGitHub { - owner = "GameTec-live"; - repo = "ChameleonUltraGUI"; - sha256 = "1mb6wkqk6vaamrhflfhsgp5gvqiw2qkvmy7j65abcx7sn5990i27"; - rev = "11424abaccb4a010fcbeab9799ae8f675d8afe99"; - }; - - desktopItems = [ - (pkgs.makeDesktopItem { - name = self.pname; - desktopName = "Chameleon Ultra GUI"; - icon = self.pname; - comment = self.meta.description; - - exec = "chameleonultragui"; - terminal = false; - - categories = [ - "Utility" - ]; - }) - ]; - - # path to application within fetched sources - sourceRoot = "source/chameleonultragui"; - - buildInputs = [ - pkgs.imagemagick # creating mipmaps for share/icons - pkgs.yj # converting pubspec.lock yaml->json - ]; - - buildArguments = ["--release"]; - - # source files compile with Flutter >3.29.0 but this - # derivation uses 3.24.0 (so we patch for compatability) - postPatch = let - argbPatch = '' - --- general.dart.old 2025-05-11 15:59:51.812132078 +1000 - +++ general.dart 2025-05-11 15:58:14.755856407 +1000 - @@ -211,7 +211,7 @@ - } - - String colorToHex(Color color) { - - return '#\''${color.toARGB32().toRadixString(16).padLeft(8, '0').substring(2)}'; - + return '#\''${color.value.toRadixString(16).padLeft(8, '0').substring(2)}'; - } - - Color hexToColor(String hex) { - ''; - in '' - # patch source files using Color.toARGB32 method (not defined in Flutter 3.24) - argbPatch="${argbPatch}" - patch lib/helpers/general.dart <(echo "$argbPatch") - ''; - - # installPhase = '' - # runHook preInstall - - # # create mipmaps of desktop logo - # logoOriginal="assets/logo-color-desktop.png" - # for i in 16 32 64 128 256 512; do - # res="$i"x"$i" - # logoOut="$out"/share/icons/hicolor/"$res"/apps - # mkdir -p $logoOut - # ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${pname}.png - # done - - # runHook postInstall - # ''; - - # Nix doesn't natively have a fromYAML function (so I made this instead) - pubspecLock = let - appRoot = "${self.src}/chameleonultragui"; - - # when generating patch files use -u flag and then - # make sure to escape all " characters for Nix string - pubspecLockPatch = '' - --- pubspec.lock.bak2025-05-10 15:42:44.287730979 +1000 - +++ pubspec.lock2025-05-10 15:41:23.778480048 +1000 - @@ -5,18 +5,23 @@ - dependency: transitive - description: - name: _fe_analyzer_shared - - sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 - + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 - url: \"https://pub.dev\" - source: hosted - - version: \"80.0.0\" - + version: \"72.0.0\" - + _macros: - + dependency: transitive - + description: dart - + source: sdk - + version: \"0.3.2\" - analyzer: - dependency: transitive - description: - name: analyzer - - sha256: \"192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e\" - + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 - url: \"https://pub.dev\" - source: hosted - - version: \"7.3.0\" - + version: \"6.7.0\" - archive: - dependency: \"direct main\" - description: - @@ -37,26 +42,26 @@ - dependency: \"direct main\" - description: - name: async - - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 - + sha256: \"947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c\" - url: \"https://pub.dev\" - source: hosted - - version: \"2.12.0\" - + version: \"2.11.0\" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - - sha256: \"8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea\" - + sha256: \"6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66\" - url: \"https://pub.dev\" - source: hosted - - version: \"2.1.2\" - + version: \"2.1.1\" - characters: - dependency: transitive - description: - name: characters - - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - + sha256: \"04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.4.0\" - + version: \"1.3.0\" - checked_yaml: - dependency: transitive - description: - @@ -77,18 +82,18 @@ - dependency: transitive - description: - name: clock - - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: \"https://pub.dev\" - source: hosted - - version: \"1.1.2\" - + version: \"1.1.1\" - collection: - dependency: \"direct main\" - description: - name: collection - - sha256: \"2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76\" - + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: \"https://pub.dev\" - source: hosted - - version: \"1.19.1\" - + version: \"1.18.0\" - convert: - dependency: \"direct main\" - description: - @@ -157,10 +162,10 @@ - dependency: transitive - description: - name: fake_async - - sha256: \"6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc\" - + sha256: \"511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.3.2\" - + version: \"1.3.1\" - ffi: - dependency: \"direct main\" - description: - @@ -196,11 +201,10 @@ - file_saver: - dependency: \"direct main\" - description: - - path: \".\" - - ref: fix-windows - - resolved-ref: \"3038d74d5560dcca528423fffd745abf31eb88ae\" - - url: \"https://github.com/Foxushka/file_saver.git\" - - source: git - + name: file_saver - + sha256: \"017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e\" - + url: \"https://pub.dev\" - + source: hosted - version: \"0.2.14\" - fixnum: - dependency: transitive - @@ -234,11 +238,10 @@ - flutter_libserialport: - dependency: \"direct main\" - description: - - path: \".\" - - ref: main - - resolved-ref: \"6740aae075505a220a98492910b090824efc7910\" - - url: \"https://github.com/NeariX67/flutter_libserialport.git\" - - source: git - + name: flutter_libserialport - + sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336 - + url: \"https://pub.dev\" - + source: hosted - version: \"0.5.0\" - flutter_lints: - dependency: \"direct dev\" - @@ -347,18 +350,18 @@ - dependency: transitive - description: - name: leak_tracker - - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec - + sha256: \"3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05\" - url: \"https://pub.dev\" - source: hosted - - version: \"10.0.8\" - + version: \"10.0.5\" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 - + sha256: \"932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806\" - url: \"https://pub.dev\" - source: hosted - - version: \"3.0.9\" - + version: \"3.0.5\" - leak_tracker_testing: - dependency: transitive - description: - @@ -399,14 +402,22 @@ - url: \"https://pub.dev\" - source: hosted - version: \"1.3.0\" - + macros: - + dependency: transitive - + description: - + name: macros - + sha256: \"0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536\" - + url: \"https://pub.dev\" - + source: hosted - + version: \"0.1.2-main.4\" - matcher: - dependency: transitive - description: - name: matcher - - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: \"https://pub.dev\" - source: hosted - - version: \"0.12.17\" - + version: \"0.12.16+1\" - material_color_utilities: - dependency: transitive - description: - @@ -419,10 +430,10 @@ - dependency: transitive - description: - name: meta - - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c - + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 - url: \"https://pub.dev\" - source: hosted - - version: \"1.16.0\" - + version: \"1.15.0\" - mobile_scanner: - dependency: \"direct main\" - description: - @@ -467,10 +478,10 @@ - dependency: \"direct main\" - description: - name: path - - sha256: \"75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5\" - + sha256: \"087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.9.1\" - + version: \"1.9.0\" - path_provider: - dependency: transitive - description: - @@ -723,15 +734,15 @@ - dependency: transitive - description: flutter - source: sdk - - version: \"0.0.0\" - + version: \"0.0.99\" - source_span: - dependency: transitive - description: - name: source_span - - sha256: \"254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c\" - + sha256: \"53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.10.1\" - + version: \"1.10.0\" - sprintf: - dependency: transitive - description: - @@ -744,42 +755,42 @@ - dependency: transitive - description: - name: stack_trace - - sha256: \"8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1\" - + sha256: \"73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.12.1\" - + version: \"1.11.1\" - stream_channel: - dependency: transitive - description: - name: stream_channel - - sha256: \"969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d\" - + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: \"https://pub.dev\" - source: hosted - - version: \"2.1.4\" - + version: \"2.1.2\" - string_scanner: - dependency: transitive - description: - name: string_scanner - - sha256: \"921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43\" - + sha256: \"556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde\" - url: \"https://pub.dev\" - source: hosted - - version: \"1.4.1\" - + version: \"1.2.0\" - term_glyph: - dependency: transitive - description: - name: term_glyph - - sha256: \"7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e\" - + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: \"https://pub.dev\" - source: hosted - - version: \"1.2.2\" - + version: \"1.2.1\" - test_api: - dependency: transitive - description: - name: test_api - - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd - + sha256: \"5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb\" - url: \"https://pub.dev\" - source: hosted - - version: \"0.7.4\" - + version: \"0.7.2\" - typed_data: - dependency: transitive - description: - @@ -855,12 +866,11 @@ - usb_serial: - dependency: \"direct main\" - description: - - path: \".\" - - ref: fix-usbserial - - resolved-ref: \"9fcbacc92bec19ea02d33a40d9f39e45d19cf637\" - - url: \"https://github.com/Foxushka/usbserial.git\" - - source: git - - version: \"0.5.1\" - + name: usb_serial - + sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07 - + url: \"https://pub.dev\" - + source: hosted - + version: \"0.5.2\" - uuid: - dependency: \"direct main\" - description: - @@ -881,10 +891,10 @@ - dependency: transitive - description: - name: vm_service - - sha256: \"0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14\" - + sha256: \"5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d\" - url: \"https://pub.dev\" - source: hosted - - version: \"14.3.1\" - + version: \"14.2.5\" - wakelock_plus: - dependency: \"direct main\" - description: - @@ -958,5 +968,5 @@ - source: hosted - version: \"2.2.1\" - sdks: - - dart: \">=3.7.0-0 <4.0.0\" - + dart: \">=3.5.0 <4.0.0\" - flutter: \">=3.24.0\" - ''; - in - builtins.fromJSON - ( - builtins.readFile (pkgs.runCommand "${self.pname}-buildenv" { - inputs = [ - # DEBUG (both lines commented) - #pkgs.flutter324 # ChameleonUltraGUI requires sdk >3.0.0 - #pkgs.yj - ]; - } '' - # copy source files to a temporary path to rebuild the lockfile - buildPath=$(mktemp -d) - cp -r "${appRoot}/." "$buildPath/" - - outPubspecLock="$buildPath/pubspec.lock" - # MUST define variables to use multiline Nix string in bash scripting - pubspecLockPatch="${pubspecLockPatch}" - - # apply the pubspec.yaml patch and regenerate lock file - # (create a temporary home directory for flutter to play in) - #(cd $buildPath && chmod -R +w . \ - # && patch ./pubspec.yaml <(echo "$pubspecYamlPatch") \ - # && export HOME=$(mktemp -d) \ - # && flutter --disable-analytics \ - # && flutter config --no-cli-animations \ - # && ${pkgs.flutter}/bin/flutter pub get) - - # patch the lockfile - chmod +w $outPubspecLock - patch $outPubspecLock <(echo "$pubspecLockPatch") - - # convert new lockfile to json and return - ${pkgs.yj}/bin/yj < "$buildPath/pubspec.lock" > $out - '') - ); - - # TODO: try this instead of patching - # gitHashes = { - # dartssh2 = "sha256-2pypKwurziwGLZYuGaxlS2lzN3UvJp3bRTvvYYxEqRI="; - # hotkey_manager_linux = "sha256-aO0h94YZvgV/ggVupNw8GjyZsnXrq3qTHRDtuhNv3oI="; - # system_info2 = "sha256-fly7E2vG+bQ/+QGzXk+DYba73RZccltdW2LpZGDKX60="; - # tray_menu = "sha256-riiAiBEms+9ARog8i+MR1fto1Yqx+gwbBWyNbNq6VTM="; - # window_size = "sha256-71PqQzf+qY23hTJvcm0Oye8tng3Asr42E2vfF1nBmVA="; - # xterm = "sha256-h8vIonTPUVnNqZPk/A4ZV7EYCMyM0rrErL9ZOMe4ZBE="; - # }; - - meta = with lib; { - description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; - homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; - license = licenses.gpl3; - maintainers = [maintainers.emileclarkb]; - platforms = platforms.linux; - }; -}) -.overrideAttrs ( - previousAttrs: { - installPhase = - previousAttrs.installPhase - + '' - # create mipmaps of desktop logo - logoOriginal="assets/logo-color-desktop.png" - for i in 16 32 64 128 256 512; do - res="$i"x"$i" - logoOut="$out"/share/icons/hicolor/"$res"/apps - mkdir -p $logoOut - ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${previousAttrs.pname}.png - done - ''; - } -) diff --git a/hosts/packages/huggingface_hub/flake.nix b/hosts/packages/huggingface_hub/flake.nix deleted file mode 100644 index 37814d9..0000000 --- a/hosts/packages/huggingface_hub/flake.nix +++ /dev/null @@ -1,35 +0,0 @@ -# Template: https://nixos-and-flakes.thiscute.world/development/intro -{ - description = "Humanity's Last Exam - Devshell"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; - }; - - outputs = {nixpkgs, ...}: let - system = "x86_64-linux"; - pkgs = import nixpkgs { - inherit system; - }; - python = pkgs.python312.override { - self = python; - packageOverrides = pyfinal: pyprev: { - huggingface-hub = pyfinal.callPackage ./huggingface_hub.nix {}; - hf-xet = pyfinal.callPackage ./hf-xet.nix {}; - }; - }; - in { - devShells."${system}".default = pkgs.mkShell { - packages = [ - (python.withPackages (pypkgs: [ - pypkgs.huggingface-hub - ])) - ]; - - shell = "${pkgs.bash}/bin/bash"; - shellHook = '' - alias hf=huggingface-cli - ''; - }; - }; -} diff --git a/hosts/packages/huggingface_hub/hf-xet.nix b/hosts/packages/huggingface_hub/hf-xet.nix deleted file mode 100644 index 0f4c631..0000000 --- a/hosts/packages/huggingface_hub/hf-xet.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchFromGitHub, - pkg-config, - rustPlatform, - openssl, -}: -buildPythonPackage rec { - pname = "hf-xet"; - version = "1.1.5"; - pyproject = true; - - src = fetchFromGitHub { - owner = "huggingface"; - repo = "xet-core"; - tag = "v${version}"; - hash = "sha256-udjZcXTH+Mc4Gvj6bSPv1xi4MyXrLeCYav+7CzKWyhY="; - }; - - sourceRoot = "${src.name}/hf_xet"; - - cargoDeps = rustPlatform.fetchCargoVendor { - inherit - pname - version - src - sourceRoot - ; - hash = "sha256-PTzYubJHFvhq6T3314R4aqBAJlwehOqF7SbpLu4Jo6E="; - }; - - nativeBuildInputs = [ - pkg-config - rustPlatform.cargoSetupHook - rustPlatform.maturinBuildHook - ]; - - buildInputs = [ - openssl - ]; - - env.OPENSSL_NO_VENDOR = 1; - - pythonImportsCheck = ["hf_xet"]; - - # No tests (yet?) - doCheck = false; - - meta = { - description = "Xet client tech, used in huggingface_hub"; - homepage = "https://github.com/huggingface/xet-core/tree/main/hf_xet"; - changelog = "https://github.com/huggingface/xet-core/releases/tag/v${version}"; - license = lib.licenses.asl20; - }; -} diff --git a/hosts/packages/huggingface_hub/huggingface_hub.nix b/hosts/packages/huggingface_hub/huggingface_hub.nix deleted file mode 100644 index 02b03b7..0000000 --- a/hosts/packages/huggingface_hub/huggingface_hub.nix +++ /dev/null @@ -1,62 +0,0 @@ -/* -* WARNING: Just use `pkgs.python312Packages.huggingface-hub` (or change python version) -* WARNING: I didn't realise it existed when I packaged this. -* -* Nix Resources: -* 1. https://wiki.nixos.org/wiki/Python -* 2. https://nixos.org/manual/nixpkgs/unstable/#developing-with-python -* -* Hugging Face Resources: -* 1. https://github.com/huggingface/huggingface_hub -* 2. https://huggingface.co/docs/huggingface_hub/main/en/guides/cli -*/ -{ - lib, - buildPythonPackage, - fetchPypi, - # build time dependencies - setuptools, - # runtime dependencies - filelock, - fsspec, - hf-xet, - pyyaml, - requests, - tqdm, - typing-extensions, -}: -buildPythonPackage rec { - pname = "huggingface_hub"; - version = "0.34.3"; - - src = fetchPypi { - inherit pname version; - hash = "sha256-1YEw/VqnQISAaBR1SRwKvX6DVEIIL7w+9NRbbDn4OFM="; - }; - - pyproject = true; - doCheck = false; # skip unit testing - pythonImportsCheck = ["huggingface_hub"]; - - # buildtime dependencies - build-system = [ - setuptools - ]; - # runtime dependencies - dependencies = [ - filelock - fsspec - hf-xet - pyyaml - requests - tqdm - typing-extensions - ]; - - meta = rec { - description = "The official Python client for the Huggingface Hub."; - homepage = "https://github.com/huggingface/huggingface_hub"; - changelog = "${homepage}/releases/tag/v${version}"; - license = lib.licenses.asl20; # Apache License 2.0 - }; -} diff --git a/hosts/packages/tundra/README b/hosts/packages/tundra/README deleted file mode 100644 index e44647c..0000000 --- a/hosts/packages/tundra/README +++ /dev/null @@ -1,12 +0,0 @@ -**Tundra** is the name I'm giving my *desktop environment.* -Made primarily with Aylur's Astal library and the Vala -programming language (as an excuse to learn it). - -NOTE: Tundra is designed specifically to work on Hyprland, -I have no idea how it'll interact with other window managers :) - - -##### Meson Notes (temporary) -Setup meson like `meson setup ` ie `meson setup build src`. -Compile meson like `meson compile -C ` where is the relative path to it, -if you're in it already just use `meson compile` otherwise if in project root use `meson compile build`. diff --git a/hosts/packages/tundra/flake.lock b/hosts/packages/tundra/flake.lock deleted file mode 100644 index 85ad9ef..0000000 --- a/hosts/packages/tundra/flake.lock +++ /dev/null @@ -1,62 +0,0 @@ -{ - "nodes": { - "astal": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1745934282, - "narHash": "sha256-hgUd4yUYALHzzoEi/88BnsgrxZIqk+zyQVoI3CL61IU=", - "owner": "aylur", - "repo": "astal", - "rev": "07583deff8a486fad472718572c3248f0fbea1f3", - "type": "github" - }, - "original": { - "owner": "aylur", - "repo": "astal", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1737469691, - "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1746663147, - "narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "astal": "astal", - "nixpkgs": "nixpkgs_2" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/hosts/packages/tundra/flake.nix b/hosts/packages/tundra/flake.nix deleted file mode 100644 index b6e0a36..0000000 --- a/hosts/packages/tundra/flake.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - inputs = { - nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; - astal.url = "github:aylur/astal"; - }; - - outputs = { - self, - nixpkgs, - astal, - }: let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - in { - packages.${system} = { - default = pkgs.stdenv.mkDerivation { - name = "tundra"; - src = ./.; - - nativeBuildInputs = with pkgs; [ - meson - ninja - pkg-config - vala - gobject-introspection - dart-sass - ]; - - buildInputs = [ - astal.packages.${system}.io - astal.packages.${system}.astal3 - astal.packages.${system}.battery - astal.packages.${system}.wireplumber - astal.packages.${system}.network - astal.packages.${system}.tray - astal.packages.${system}.mpris - astal.packages.${system}.hyprland - ]; - }; - }; - }; -} diff --git a/hosts/packages/tundra/src/app.in.vala b/hosts/packages/tundra/src/app.in.vala deleted file mode 100644 index b3da69e..0000000 --- a/hosts/packages/tundra/src/app.in.vala +++ /dev/null @@ -1,31 +0,0 @@ -class App : Astal.Application { - public static App instance; - - public override void request (string msg, SocketConnection conn) { - print(@"$msg\n"); - AstalIO.write_sock.begin(conn, "ok"); - } - - public override void activate () { - foreach (var mon in this.monitors) - add_window(new Bar(mon)); - - apply_css("@STYLE@"); - } - - public static void main(string[] args) { - var instance_name = "vala"; - - App.instance = new App() { - instance_name = instance_name - }; - - try { - App.instance.acquire_socket(); - App.instance.run(null); - } catch (Error err) { - print(AstalIO.send_request(instance_name, string.joinv(" ", args))); - } - } -} - diff --git a/hosts/packages/tundra/src/meson.build b/hosts/packages/tundra/src/meson.build deleted file mode 100644 index 1cc6b10..0000000 --- a/hosts/packages/tundra/src/meson.build +++ /dev/null @@ -1,47 +0,0 @@ -project('tundra', 'vala', 'c') - -bindir = get_option('prefix') / get_option('bindir') -# bindir = './bin' -libdir = get_option('prefix') / get_option('libdir') - -pkgconfig_deps = [ - dependency('glib-2.0'), - dependency('gobject-2.0'), - dependency('gtk+-3.0'), - dependency('libnm'), - dependency('astal-io-0.1'), - dependency('astal-3.0'), - dependency('astal-battery-0.1'), - dependency('astal-wireplumber-0.1'), - dependency('astal-network-0.1'), - dependency('astal-tray-0.1'), - dependency('astal-mpris-0.1'), - dependency('astal-hyprland-0.1'), -] - -# needed for GLib.Math -deps = pkgconfig_deps + meson.get_compiler('c').find_library('m') - -main = configure_file( - input: 'app.in.vala', - output: 'app.vala', - configuration: { - 'STYLE': run_command( - find_program('sass'), - meson.project_source_root() / 'style.scss', - ).stdout(), - }, -) - -sources = files( - 'widget/Bar.vala', -) - -executable( - 'tundra', - [sources, main], - dependencies: deps, - install: true, - install_dir: bindir, -) - diff --git a/hosts/packages/tundra/src/style.scss b/hosts/packages/tundra/src/style.scss deleted file mode 100644 index 5c20382..0000000 --- a/hosts/packages/tundra/src/style.scss +++ /dev/null @@ -1,107 +0,0 @@ -@use "sass:color"; - -$bg: #212223; -$fg: #f1f1f1; -$accent: #378DF7; -$radius: 7px; - -window.Bar { - border: none; - box-shadow: none; - background-color: $bg; - color: $fg; - font-size: 1.1em; - font-weight: bold; - - label { - margin: 0 8px; - } - - .Workspaces { - button { - all: unset; - background-color: transparent; - - &:hover label { - background-color: color.adjust($fg, $alpha: -0.84); - border-color: color.adjust($accent, $alpha: -0.8); - } - - &:active label { - background-color: color.adjust($fg, $alpha: -0.8) - } - } - - label { - transition: 200ms; - padding: 0 8px; - margin: 2px; - border-radius: $radius; - border: 1pt solid transparent; - } - - .focused label { - color: $accent; - border-color: $accent; - } - } - - .SysTray { - margin-right: 8px; - - button { - padding: 0 4px; - } - } - - .FocusedClient { - color: $accent; - } - - .Media .Cover { - min-height: 1.2em; - min-width: 1.2em; - border-radius: $radius; - background-position: center; - background-size: contain; - } - - .Battery label { - padding-left: 0; - margin-left: 0; - } - - .AudioSlider { - * { - all: unset; - } - - icon { - margin-right: .6em; - } - - & { - margin: 0 1em; - } - - trough { - background-color: color.adjust($fg, $alpha: -0.8); - border-radius: $radius; - } - - highlight { - background-color: $accent; - min-height: .8em; - border-radius: $radius; - } - - slider { - background-color: $fg; - border-radius: $radius; - min-height: 1em; - min-width: 1em; - margin: -.2em; - } - } -} - diff --git a/hosts/packages/tundra/src/widget/Bar.vala b/hosts/packages/tundra/src/widget/Bar.vala deleted file mode 100644 index f1ba8eb..0000000 --- a/hosts/packages/tundra/src/widget/Bar.vala +++ /dev/null @@ -1,265 +0,0 @@ -class Workspaces : Gtk.Box { - AstalHyprland.Hyprland hypr = AstalHyprland.get_default(); - public Workspaces() { - Astal.widget_set_class_names(this, {"Workspaces"}); - hypr.notify["workspaces"].connect(sync); - sync(); - } - - void sync() { - foreach (var child in get_children()) - child.destroy(); - - // TODO: create a copy of workspaces - // then create a list of tuples (map id to index in hypr.workspaces) - // then sort new list by id - // then iterate and use index on hypr.workspaces - // NEVERMIND: read `lib/hyprland/hyprland.vala` and see how the - // `_workspaces` property is defined as a HashTable - // basically just extend on that / create a wrapper - // that allows better organisation - - hypr.workspaces.sort((a, b) => { return a.id - b.id; }); - foreach (var ws in hypr.workspaces) { - // filter out special workspaces - if (!(ws.id >= -99 && ws.id <= -2)) { - add(button(ws)); - } - } - } - - Gtk.Button button(AstalHyprland.Workspace ws) { - var btn = new Gtk.Button() { - visible = true, - label = ws.id.to_string() - }; - - hypr.notify["focused-workspace"].connect(() => { - var focused = hypr.focused_workspace == ws; - if (focused) { - Astal.widget_set_class_names(btn, {"focused"}); - } else { - Astal.widget_set_class_names(btn, {}); - } - }); - - btn.clicked.connect(ws.focus); - return btn; - } -} - -class FocusedClient : Gtk.Box { - public FocusedClient() { - Astal.widget_set_class_names(this, {"Focused"}); - AstalHyprland.get_default().notify["focused-client"].connect(sync); - sync(); - } - - void sync() { - foreach (var child in get_children()) - child.destroy(); - - var client = AstalHyprland.get_default().focused_client; - if (client == null) - return; - - var label = new Gtk.Label(client.title) { visible = true }; - client.bind_property("title", label, "label", BindingFlags.SYNC_CREATE); - add(label); - } -} - -class Media : Gtk.Box { - AstalMpris.Mpris mpris = AstalMpris.get_default(); - - public Media() { - Astal.widget_set_class_names(this, {"Media"}); - mpris.notify["players"].connect(sync); - sync(); - } - - void sync() { - foreach (var child in get_children()) - child.destroy(); - - if (mpris.players.length() == 0) { - add(new Gtk.Label("Nothing Playing")); - return; - } - - var player = mpris.players.nth_data(0); - var label = new Gtk.Label(null); - var cover = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0) { - valign = Gtk.Align.CENTER - }; - - Astal.widget_set_class_names(cover, {"Cover"}); - player.bind_property("metadata", label, "label", BindingFlags.SYNC_CREATE, (_, src, ref trgt) => { - var title = player.title; - var artist = player.artist; - trgt.set_string(@"$artist - $title"); - return true; - }); - - var id = player.notify["cover-art"].connect(() => { - var art = player.cover_art; - Astal.widget_set_css(cover, @"background-image: url('$art')"); - }); - - cover.destroy.connect(() => player.disconnect(id)); - add(cover); - add(label); - } -} - -class SysTray : Gtk.Box { - HashTable items = new HashTable(str_hash, str_equal); - AstalTray.Tray tray = AstalTray.get_default(); - - public SysTray() { - Astal.widget_set_class_names(this, { "SysTray" }); - tray.item_added.connect(add_item); - tray.item_removed.connect(remove_item); - } - - void add_item(string id) { - if (items.contains(id)) - return; - - var item = tray.get_item(id); - var btn = new Gtk.MenuButton() { use_popover = false, visible = true }; - var icon = new Astal.Icon() { visible = true }; - - item.bind_property("tooltip-markup", btn, "tooltip-markup", BindingFlags.SYNC_CREATE); - item.bind_property("gicon", icon, "gicon", BindingFlags.SYNC_CREATE); - item.bind_property("menu-model", btn, "menu-model", BindingFlags.SYNC_CREATE); - btn.insert_action_group("dbusmenu", item.action_group); - item.notify["action-group"].connect(() => { - btn.insert_action_group("dbusmenu", item.action_group); - }); - - btn.add(icon); - add(btn); - items.set(id, btn); - } - - void remove_item(string id) { - if (items.contains(id)) { - items.remove(id); - } - } -} - -class Wifi : Astal.Icon { - public Wifi() { - Astal.widget_set_class_names(this, {"Wifi"}); - var wifi = AstalNetwork.get_default().wifi; - // var wifi = AstalNetwork.get_default().get_wifi(); - if (wifi != null) { - wifi.bind_property("ssid", this, "tooltip-text", BindingFlags.SYNC_CREATE); - wifi.bind_property("icon-name", this, "icon", BindingFlags.SYNC_CREATE); - } - } -} - -class AudioSlider : Gtk.Box { - Astal.Icon icon = new Astal.Icon(); - Astal.Slider slider = new Astal.Slider() { hexpand = true }; - - public AudioSlider() { - add(icon); - add(slider); - Astal.widget_set_class_names(this, {"AudioSlider"}); - Astal.widget_set_css(this, "min-width: 140px"); - - var speaker = AstalWp.get_default().audio.default_speaker; - speaker.bind_property("volume-icon", icon, "icon", BindingFlags.SYNC_CREATE); - speaker.bind_property("volume", slider, "value", BindingFlags.SYNC_CREATE); - slider.dragged.connect(() => speaker.volume = slider.value); - } -} - -class Battery : Gtk.Box { - Astal.Icon icon = new Astal.Icon(); - Astal.Label label = new Astal.Label(); - - public Battery() { - add(icon); - add(label); - Astal.widget_set_class_names(this, {"Battery"}); - - var bat = AstalBattery.get_default(); - bat.bind_property("is-present", this, "visible", BindingFlags.SYNC_CREATE); - bat.bind_property("battery-icon-name", icon, "icon", BindingFlags.SYNC_CREATE); - bat.bind_property("percentage", label, "label", BindingFlags.SYNC_CREATE, (_, src, ref trgt) => { - var p = Math.floor(src.get_double() * 100); - trgt.set_string(@"$p%"); - return true; - }); - } -} - -class Time : Astal.Label { - string format; - AstalIO.Time interval; - - void sync() { - label = new DateTime.now_local().format(format); - } - - public Time(string format = "%H:%M - %A %e.") { - this.format = format; - interval = AstalIO.Time.interval(1000, null); - interval.now.connect(sync); - destroy.connect(interval.cancel); - Astal.widget_set_class_names(this, {"Time"}); - } -} - -class Left : Gtk.Box { - public Left() { - Object(hexpand: true, halign: Gtk.Align.START); - add(new Workspaces()); - add(new FocusedClient()); - } -} - -class Center : Gtk.Box { - public Center() { - add(new Media()); - } -} - -class Right : Gtk.Box { - public Right() { - Object(hexpand: true, halign: Gtk.Align.END); - add(new SysTray()); - add(new Wifi()); - add(new AudioSlider()); - add(new Battery()); - add(new Time()); - } -} - -class Bar : Astal.Window { - public Bar(Gdk.Monitor monitor) { - Object( - anchor: Astal.WindowAnchor.TOP - | Astal.WindowAnchor.LEFT - | Astal.WindowAnchor.RIGHT, - exclusivity: Astal.Exclusivity.EXCLUSIVE, - gdkmonitor: monitor - ); - - Astal.widget_set_class_names(this, {"Bar"}); - - add(new Astal.CenterBox() { - start_widget = new Left(), - center_widget = new Center(), - end_widget = new Right(), - }); - - show_all(); - } -} - diff --git a/hosts/packages/x86-manpages/default.nix b/hosts/packages/x86-manpages/default.nix deleted file mode 100644 index b687422..0000000 --- a/hosts/packages/x86-manpages/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{pkgs, ...}: -pkgs.stdenv.mkDerivation { - pname = "x86-manpages"; - version = "0.0.1"; - - src = pkgs.fetchFromGitHub { - owner = "ttmo-O"; - repo = "x86-manpages"; - - ## Recommended - # rev = "0e199a8b4d90be7eb715291c21cf41de8527beac"; - # sha256 = "0im596j0pf90npg933gkq6wpw23c47fcwv0n64qfqn5mcy92qbcb"; - rev = "94902f9c45de0efe803c32b6c3e88d6623881866"; - sha256 = "0k6nsfabzqwnhjiyw2kyg0z49nzrsxn515f6dcjh1rn7bzih5562"; - }; - - installPhase = '' - mkdir -p $out/man/man7 - - shopt -u nullglob - for m in man7/*.7; do - install -m 644 "$m" "$out/man/man7" - done - ''; - - meta = with pkgs.lib; { - description = "Manpages for x86 instructions"; - homepage = "https://github.com/ttmo-O/x86-manpages"; - license = licenses.mit; - platforms = platforms.all; - }; -} diff --git a/hosts/sddm-theme-corners.nix b/hosts/sddm-theme-corners.nix index e9a755f..ccc93f0 100755 --- a/hosts/sddm-theme-corners.nix +++ b/hosts/sddm-theme-corners.nix @@ -1,8 +1,8 @@ {pkgs}: { - sddm-theme-corners = pkgs.stdenv.mkDerivation { + sddm-theme-corners = pkgs.stdenv.mkDerivation rec { name = "sddm-theme-corners"; - version = "1.0.0"; - + #version = "1.0"; + #dontBuild = true; installPhase = '' mkdir -p $out/share/sddm/themes cp -ar $src/corners $out/share/sddm/themes/ diff --git a/hosts/modules/colmena.nix b/modules/colmena.nix similarity index 100% rename from hosts/modules/colmena.nix rename to modules/colmena.nix diff --git a/hosts/modules/core/bluetooth.nix b/modules/core/bluetooth.nix similarity index 100% rename from hosts/modules/core/bluetooth.nix rename to modules/core/bluetooth.nix diff --git a/hosts/modules/core/bootloader/grub.nix b/modules/core/bootloader/grub.nix similarity index 100% rename from hosts/modules/core/bootloader/grub.nix rename to modules/core/bootloader/grub.nix diff --git a/hosts/modules/core/bootloader/systemd-boot.nix b/modules/core/bootloader/systemd-boot.nix similarity index 100% rename from hosts/modules/core/bootloader/systemd-boot.nix rename to modules/core/bootloader/systemd-boot.nix diff --git a/hosts/modules/core/garbage-collector.nix b/modules/core/garbage-collector.nix similarity index 100% rename from hosts/modules/core/garbage-collector.nix rename to modules/core/garbage-collector.nix diff --git a/modules/core/sound/default.nix b/modules/core/sound/default.nix new file mode 100755 index 0000000..e69de29 diff --git a/hosts/modules/core/sound/pipewire.nix b/modules/core/sound/pipewire.nix similarity index 100% rename from hosts/modules/core/sound/pipewire.nix rename to modules/core/sound/pipewire.nix diff --git a/hosts/modules/discord/nixcord.nix b/modules/discord/nixcord.nix similarity index 100% rename from hosts/modules/discord/nixcord.nix rename to modules/discord/nixcord.nix diff --git a/hosts/modules/hyprland/default.nix b/modules/hyprland/default.nix similarity index 74% rename from hosts/modules/hyprland/default.nix rename to modules/hyprland/default.nix index 530f075..71ee559 100755 --- a/hosts/modules/hyprland/default.nix +++ b/modules/hyprland/default.nix @@ -1,12 +1,12 @@ -# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland) -# and your home-manager config (for managing hyprland's config files) -{ +{ pkgs, inputs, config, - lib, - ... -}: { + lib, + ... +}: + +{ options.hyprland = { enable = lib.mkEnableOption "Hyprland"; }; @@ -17,7 +17,7 @@ #package = inputs.hyprland.packages.${pkgs.system}.hyprland; xwayland.enable = true; }; - + xdg.portal = { enable = true; extraPortals = with pkgs; [ @@ -26,5 +26,5 @@ }; # TODO: finish this (I didn't like the dotfiles I was getting inspo from and stopped) - }; + }; } diff --git a/hosts/modules/wishlist.nix b/modules/wishlist.nix similarity index 100% rename from hosts/modules/wishlist.nix rename to modules/wishlist.nix diff --git a/hosts/modules/wishlist.nix.bak b/modules/wishlist.nix.bak similarity index 100% rename from hosts/modules/wishlist.nix.bak rename to modules/wishlist.nix.bak diff --git a/result b/result new file mode 120000 index 0000000..fab173e --- /dev/null +++ b/result @@ -0,0 +1 @@ +/nix/store/clc95m2c889yns3n8c71vfgb1q2qd419-nixos-system-myputer-24.11.20250212.0ff09db \ No newline at end of file diff --git a/scripts/box b/scripts/box deleted file mode 100755 index 7f69cb0..0000000 --- a/scripts/box +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -USAGE="Usage: box [--enter]" - -# ===== Configuration ===== # -DATA_DIR="$HOME/.data/box" -# ========================= # - -function setup { - mkdir -p "$DATA_DIR" &>/dev/null -} - -function box { - mktemp -d - # TODO: use a custom name instead -} - -set -euo pipefail - -ENTER=false -for arg in $@; do - case "$arg" in - -e|--enter) - ENTER=true - shift - ;; - -h|--help) - echo "$USAGE" - ;; - -*) - echo "[!] Unknown opt \"$arg\"" >&2 - ;; - *) - echo "[!] Unknown arg \"$arg\"" >&2 - ;; - esac -done - -setup - -BOX=$(box) - -if [[ "$ENTER" == true ]]; then - cd "$BOX" -fi diff --git a/scripts/fontgrep b/scripts/fontgrep deleted file mode 100755 index 6e06a64..0000000 --- a/scripts/fontgrep +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -function fontgrep { - fc-list \ - | grep $@ \ - | awk '{$1=""; print substr($0, 2, length($0)-1) }' \ - | grep -oE '^\s*[^,]+' \ - | sort \ - | uniq -} - -fontgrep $@ diff --git a/scripts/huhh b/scripts/huhh deleted file mode 100755 index 5dbcc81..0000000 --- a/scripts/huhh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -EXPR_MSG="evaluating derivation" -PROP_MSG="of derivation" - -LOC=$1 -if [ -z $1 ]; then - exec {1}<>"$LOC" -fi - -ERROR_LINE=$(<$LOC grep -nF "error:" \ - | tail -n1 \ - | awk '{print substr($1,1,length($1)-1)}' ) -<$LOC sed -n "$ERROR_LINE,\$p" - -echo "[*] Reason:" -<$LOC grep "evaluating attribute '.*' of derivation" \ - | awk '{ print substr($NF, 2, length($NF)-2), substr($5, 2, length($5)-2)}' diff --git a/scripts/lsyscalls b/scripts/lsyscalls deleted file mode 100755 index 5cbd744..0000000 --- a/scripts/lsyscalls +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -# USAGE: lsyscalls | sort [-nk2] - -echo -e '#include '\ - | cpp -dM \ - | grep "#define __NR_.*[0-9]$" \ - | cut -d_ -f 4- diff --git a/scripts/nix-list-installed b/scripts/nix-list-installed deleted file mode 100755 index 5a253b9..0000000 --- a/scripts/nix-list-installed +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh -nix-store -q --references /var/run/current-system/sw \ - | cut -d'-' -f2- diff --git a/scripts/openport b/scripts/openport deleted file mode 100755 index dd6222f..0000000 --- a/scripts/openport +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# Credit: u/boxofrox https://discourse.nixos.org/u/boxofrox -# Ref: https://discourse.nixos.org/t/how-to-temporarily-open-a-tcp-port-in-nixos/12306/3 -USAGE="[Usage] sudo withport " - -set -ueo pipefail - -open-port() { - local port=$1 - iptables -A INPUT -p tcp --dport $port -j ACCEPT -} - -close-port() { - local port=${1:-0} - iptables -D INPUT -p tcp --dport $port -j ACCEPT -} - -PORT=$1 -if [[ -z "$PORT" ]]; then - echo -e "[!] Port not given\n$USAGE" >&2 - exit 1 -fi -shift; # Drop port argument - -if [[ 0 -eq $# ]]; then - echo -e "[!] Command not given\n$USAGE" >&2 - exit 1 -fi - -open-port $PORT -# Ensure port closes if error occurs. -trap "close-port $PORT" EXIT -# Run the command as user, not root. -runuser -u $SUDO_USER -- "$@" -# Trap will close port. diff --git a/scripts/set-wallpaper b/scripts/set-wallpaper deleted file mode 100755 index 2f6b928..0000000 --- a/scripts/set-wallpaper +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# THIS PROGRAM RELIES SOLELY ON `SWWW` - -transition=$1 -wallpaper_path=$2 - -if [[ "$transition" == "wipe" ]]; then - swww img --transition-type wipe --transition-angle 30 --transition-step 90 --transition-fps 60 $wallpaper_path -elif [[ "$transition" == "preview" ]]; then - swww img --transition-type wipe --transition-angle 45 --transition-step 90 --transition-bezier .27,.98,.78,0 --transition-fps 60 $wallpaper_path -elif [[ "$transition" == "circle" ]]; then - swww img --transition-type grow --transition-pos "$(hyprctl cursorpos)" --transition-duration 3 --transition-fps 60 --invert-y $wallpaper_path -else - echo "[!] Unknown transition type \"$transition\"" - exit 1 -fi diff --git a/scripts/testvps b/scripts/testvps deleted file mode 100755 index 4382b7d..0000000 --- a/scripts/testvps +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -# Requires: systemctl - -set -u - -function match { - [[ "$1" =~ $2 ]] -} - -function padlen { - local MAX=0 - for KEY in "$@"; do - local LEN=${#KEY} - ((LEN > MAX)) && MAX=$LEN - done - echo $MAX -} - -function pad { - local PAD="$1" - if [ -z "$PAD" ]; then - exit 1 - fi - - for ((i=0; i/dev/null) - if [ -z "$STAT" ]; then - fmt_print "$SERVICE" "$LPAD" "NOTFOUND" - exit 1 - fi - - local STAT_LOADED=$(head -n2 <<< "$STAT" | tail -n1) - # NOTE: "active " intentionally contains right padding - local ENABLED=$(match "$STAT_LOADED" "^\s*Loaded: loaded \(.*; enabled; .*\)" && echo "enabled" || echo "disabled") - local ACTIVE=$(match "$STAT" "\s*Active: active \(running\)" && echo "active " || echo "inactive") - fmt_print "$SERVICE" "$LPAD" "$ACTIVE" "$ENABLED" -) - -function test_services { - local PAD_ALIGN=$(padlen $@) - # fmt_test_service - for SERVICE in "$@"; do - local LPAD=$((PAD_ALIGN - ${#SERVICE})) - fmt_test_service "$SERVICE" $LPAD - done -} - -test_services nginx forgejo vaultwarden diff --git a/scripts/webdev b/scripts/webdev deleted file mode 100755 index 9754cdc..0000000 --- a/scripts/webdev +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env bash -USAGE="Usage: webdev [-h|--help] [-q|--quiet] uri|file" - -# NOTE: These can either be set manually here or they -# NOTE: can be exported as environment variables (^-^) -# === Configuration === # -DEFAULT_BROWSER=${DEFAULT_BROWSER:-} -# ===================== # - -# WARNING: Internal use only (do not modify!) -# === Internal Environment === # -QUIET=false -BROWSER="" -LOC="" -LOC_TYPE="" # file or uri -# ============================ # - -# Quiet Echo - doesn't echo if QUIET is set -qecho() { - if [[ "$QUIET" == false ]]; then - echo "$@" - fi -} - -# Argument Parsing -for ARG in $@; do - case $ARG in - -h|--help) - echo "$USAGE" - exit 0 - ;; - -q|--quiet) - QUIET=true - ;; - -*) - echo -e "[!] Unknown option \"$ARG\"\n$USAGE" >&2 - exit 1 - ;; - *) - # first unknown (non-option) argument assumed $LOC - if [[ -n "$LOC" ]]; then - LOC="$OPT" - else - echo "[!] Unknown option \"$ARG\"\n$USAGE" >&2 - exit 1 - fi - ;; - esac -done -# ensure $LOC was set during argparse phase -if [[ -z "$LOC" ]]; then - echo -e "[!] URI or file not specified\n$USAGE" >&2 -fi - -# Use DEFAULT_BROWSER or check XDG default-web-browser or fail -if [[ -n "$DEFAULT_BROWSER" ]]; then - qecho "[+] Browser manually set to $DEFAULT_BROWSER" - qecho " > Skipped checking XDG default-web-browser" -else - qecho "[*] Lookup XDG default-web-browser" - BROWSER=$(xdg-settings get default-web-browser 2>/dev/null) - if [[ $? -eq 0 ]]; then - BROWSER=${BROWSER%%.desktop} - qecho "[+] Browser automatically set to $BROWSER" - else - echo "[!] Unknown browser girlypop :(" >&2 - echo " > Either:" >&2 - echo " > 1. export DEFAULT_BROWSER" >&2 - echo " > 2. run \`xdg-settings set default-web-browser\`" >&2 - exit 1 - fi -fi -echo # linebreak - -# Check if $LOC is a valid path -REALPATH=$(realpath "$LOC" 2>/dev/null) -if [ -f "$REALPATH"]; then - LOC="file://$LOC" # open file directly via "file" protocol -fi -# Substitutions left intentionally unquoted (allows for providing args) -command $BROWSER $LOC