diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index e69de29..81b47aa --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,6 @@ +ISSUES/ +secrets/ +nib/ + +result +rebuild*.log diff --git a/GUIDE.md b/GUIDE.md new file mode 100644 index 0000000..7666492 --- /dev/null +++ b/GUIDE.md @@ -0,0 +1,109 @@ +# 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/README.md b/README.md old mode 100755 new mode 100644 index ce2a13b..36d887e --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ +## My NixOS Flake ### Philosophy -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. +> [!TODO] My philosophy has kinda changed since the beginning -###### Structuring Modules +### Repo Structure 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` @@ -13,15 +10,19 @@ 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 `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 :) +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 +``` - - -##### Small Explanation of Fonts +### Random 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") @@ -33,19 +34,9 @@ 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/ -### 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 +### Links +#### Inspiration +##### 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! @@ -64,22 +55,29 @@ 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 new file mode 100644 index 0000000..d3046f6 --- /dev/null +++ b/SCREENSHARING @@ -0,0 +1,11 @@ +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/TODO.md b/TODO.md new file mode 100644 index 0000000..6b9f235 --- /dev/null +++ b/TODO.md @@ -0,0 +1,32 @@ +## 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/banner b/banner new file mode 100644 index 0000000..67e1bd9 --- /dev/null +++ b/banner @@ -0,0 +1,6 @@ + .------------. + | oh my | + '------------' + ^ (\_(\ + '----- ( -.-) + o_(")(") diff --git a/config.temp/hyprland.conf b/config.temp/hyprland.conf new file mode 100755 index 0000000..4876e8a --- /dev/null +++ b/config.temp/hyprland.conf @@ -0,0 +1,373 @@ +# 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 b72232d..911d054 100755 --- a/deploy +++ b/deploy @@ -1,3 +1,82 @@ #!/usr/bin/env bash -sudo nixos-rebuild switch --flake . -#nixos-rebuild build --flake .# --cores 8 -j 1 +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 +# to make the system from scratch +collect_garbage () { + sudo nix-collect-garbage --delete-old +} + +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) + 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 +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) + flag_bootloader=true ;; + -h|--help) + echo "$usage" + exit 0 ;; + *) + echo "[!] Unknown flag \"$flag\"" + exit 1 ;; + esac +done + +# delete cached items in nixstore +if [ "$flag_fresh" = true ]; then + collect_garbage + exit 0 +fi + +# nixos-rebuild switch ... +if [ "$flag_bootloader" = true ]; then + collect_garbage + rebuild_flake "reinstall-bootloader" +else + rebuild_flake +fi diff --git a/docs/DEVDOC.md b/docs/DEVDOC.md new file mode 100644 index 0000000..4b8567e --- /dev/null +++ b/docs/DEVDOC.md @@ -0,0 +1,25 @@ +## Users + +#### me +My main personal account, used on my PC and laptop. +Contains a hyprland graphical environment by default. + +#### ae +Primary account on my servers. Contains the bare +essentials for my work, no graphical environment. + + +#### friends +A simple account I let me friends connect to. +Limited functionality, mostly just for letting +them test small things or for giving them files. + + +## Setup Guide +##### Adding a New Server +Enable an ssh server on the remote host, then on the +local machine set `.ssh/config` to have a profile for +your desired host and have a key pair that's authorised +to your desired user. + +NOTE: these keys must have permission 600 (only readable/writable by you) diff --git a/docs/DEV_ENV.md b/docs/DEV_ENV.md new file mode 100644 index 0000000..65e8bb0 --- /dev/null +++ b/docs/DEV_ENV.md @@ -0,0 +1,67 @@ +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 new file mode 100644 index 0000000..5b0e3a6 --- /dev/null +++ b/docs/PROBLEMLOG.md @@ -0,0 +1,5 @@ +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/TODO b/docs/TODO.md old mode 100644 new mode 100755 similarity index 86% rename from TODO rename to docs/TODO.md index d91cb7b..f498088 --- a/TODO +++ b/docs/TODO.md @@ -17,15 +17,20 @@ Get hyprcursor working with Bibata-Modern-Ice Get a GRUB theme working Get SDDM and a theme working +Make a custom hyprlock screen - - -Get waybar (or another bar) working - +Get AGS working +Make an applauncher in AGS +Remove hyprland splash screen on init +Made lolcathost home modular Overtime just install more programs that I need regularly: ie - btop/htop/etc +Get GTK Bibata Cursors to be the same size as my system cursor (NOT SURE WHAT I DID...) + + +Get waybar (or another bar) working Get a QT theme @@ -35,12 +40,10 @@ Bind new terminal to SUPER+Enter instead of SUPER+Q Join Rio Terminal's discord and ask if they support nerdfonts or if I'm doing something wrong -Figure out how to modularise my dotfiles Change Dell loading screen (Boot Graphics Resource Table, aka BGRT) -Get GTK Bibata Cursors to be the same size as my system cursor diff --git a/docs/TODO_UI.md b/docs/TODO_UI.md new file mode 100755 index 0000000..34b5246 --- /dev/null +++ b/docs/TODO_UI.md @@ -0,0 +1,3 @@ +1. Create more themes for my applauncher +2. Create more themes for hyprlock + check out: https://github.com/MrVivekRajan/Hyprlock-Styles diff --git a/INSPIRATION b/docs/inspiration.md old mode 100644 new mode 100755 similarity index 55% rename from INSPIRATION rename to docs/inspiration.md index 2c5adf0..fdb73ab --- a/INSPIRATION +++ b/docs/inspiration.md @@ -6,3 +6,7 @@ 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/docs/nixos_notes.md b/docs/nixos_notes.md new file mode 100644 index 0000000..e396b10 --- /dev/null +++ b/docs/nixos_notes.md @@ -0,0 +1,2 @@ +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 100755 new mode 100644 index 4f9c813..e1ab303 --- a/flake.lock +++ b/flake.lock @@ -1,84 +1,36 @@ { "nodes": { - "ags": { + "colmena": { "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nix-github-actions": "nix-github-actions", "nixpkgs": "nixpkgs", - "systems": "systems" + "stable": "stable" }, "locked": { - "lastModified": 1728326430, - "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", - "owner": "Aylur", - "repo": "ags", - "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", + "lastModified": 1734374287, + "narHash": "sha256-rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=", + "owner": "zhaofengli", + "repo": "colmena", + "rev": "47b6414d800c8471e98ca072bc0835345741a56a", "type": "github" }, "original": { - "owner": "Aylur", - "repo": "ags", - "type": "github" - } - }, - "ags_2": { - "inputs": { - "nixpkgs": "nixpkgs_4", - "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", + "owner": "zhaofengli", + "repo": "colmena", + "rev": "47b6414d800c8471e98ca072bc0835345741a56a", "type": "github" } }, "flake-compat": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", "type": "github" }, "original": { @@ -87,71 +39,18 @@ "type": "github" } }, - "flake-compat_2": { + "flake-utils": { "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_3": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "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" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", + "owner": "numtide", + "repo": "flake-utils", "type": "github" } }, @@ -160,11 +59,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1730004881, - "narHash": "sha256-8xVIqIW25o2uCL0fxAmP4Sj9sdebarQXmd1+64yMe8o=", + "lastModified": 1757136219, + "narHash": "sha256-tKU+vq34KHu/A2wD7WdgP5A4/RCmSD8hB0TyQAUlixA=", "owner": "vinceliuice", "repo": "grub2-themes", - "rev": "42c232dfb46bf93c17506cbc1a574e5e89b5e09f", + "rev": "80dd04ddf3ba7b284a7b1a5df2b1e95ee2aad606", "type": "github" }, "original": { @@ -173,247 +72,34 @@ "type": "github" } }, - "home-manager": { + "nix-github-actions": { "inputs": { "nixpkgs": [ + "colmena", "nixpkgs" ] }, "locked": { - "lastModified": 1730633670, - "narHash": "sha256-ZFJqIXpvVKvzOVFKWNRDyIyAo+GYdmEPaYi1bZB6uf0=", + "lastModified": 1729742964, + "narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=", "owner": "nix-community", - "repo": "home-manager", - "rev": "8f6ca7855d409aeebe2a582c6fd6b6a8d0bf5661", + "repo": "nix-github-actions", + "rev": "e04df33f62cdcf93d73e9a04142464753a16db67", "type": "github" }, "original": { "owner": "nix-community", - "repo": "home-manager", - "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_3", - "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_5" - }, - "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" - } - }, - "nixcord": { - "inputs": { - "flake-compat": "flake-compat_2", - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1730720546, - "narHash": "sha256-5147A6X0MH6u/YDxLe+Nnva3oxfLQanC716LarG/uoo=", - "owner": "kaylorben", - "repo": "nixcord", - "rev": "e3e27c77316f7526b1a846778ae9c759c9377611", - "type": "github" - }, - "original": { - "owner": "kaylorben", - "repo": "nixcord", + "repo": "nix-github-actions", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "lastModified": 1734119587, + "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5", "type": "github" }, "original": { @@ -423,29 +109,29 @@ "type": "github" } }, - "nixpkgs-stable": { + "nixpkgs-unstable": { "locked": { - "lastModified": 1730741070, - "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1730808093, - "narHash": "sha256-oOenwoxpzQsBNi7KltgnXqq6e0+CxlfNXKn3k27w6cQ=", + "lastModified": 1761269590, + "narHash": "sha256-yTr+PCi4wGbOEidrm8XyXBobLxLMqIBsbUyhwsN6wrc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c1a390f74b2c93f69a6805142f11a215a689cec1", + "rev": "d792a6e0cd4ba35c90ea787b717d72410f56dc40", "type": "github" }, "original": { @@ -457,295 +143,41 @@ }, "nixpkgs_3": { "locked": { - "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_4": { - "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_5": { - "locked": { - "lastModified": 1729880355, - "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", + "lastModified": 1761016216, + "narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", + "rev": "481cf557888e05d3128a76f14c76397b7d7cc869", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-unstable", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs_6": { - "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_7": { - "locked": { - "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_8": { - "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", - "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", - "home-manager": "home-manager", - "hyprland": "hyprland", - "hyprpanel": "hyprpanel", - "nix-flatpak": "nix-flatpak", - "nixcord": "nixcord", - "nixpkgs": "nixpkgs_7", - "spicetify-nix": "spicetify-nix", - "swww": "swww" + "nixpkgs": "nixpkgs_3", + "nixpkgs-unstable": "nixpkgs-unstable" } }, - "spicetify-nix": { - "inputs": { - "flake-compat": "flake-compat_3", - "nixpkgs": [ - "nixpkgs" - ] - }, + "stable": { "locked": { - "lastModified": 1730780158, - "narHash": "sha256-ZJkCFn4PL49rINz7xrjlBqw9nF8wWJE7fSVqbHlCWSA=", - "owner": "Gerg-L", - "repo": "spicetify-nix", - "rev": "2791c6662002731d3dfc00312307aef547e1c8be", + "lastModified": 1730883749, + "narHash": "sha256-mwrFF0vElHJP8X3pFCByJR365Q2463ATp2qGIrDUdlE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dba414932936fde69f0606b4f1d87c5bc0003ede", "type": "github" }, "original": { - "owner": "Gerg-L", - "repo": "spicetify-nix", - "type": "github" - } - }, - "swww": { - "inputs": { - "flake-compat": "flake-compat_4", - "nixpkgs": "nixpkgs_8", - "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", + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", "type": "github" } } diff --git a/flake.nix b/flake.nix old mode 100755 new mode 100644 index 138b629..e339ce6 --- a/flake.nix +++ b/flake.nix @@ -2,60 +2,55 @@ description = "Emile's Nix Dotfiles"; inputs = { - #nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; - 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"; + colmena.url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a"; 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"; }; outputs = { self, nixpkgs, - home-manager, - hyprland, + nixpkgs-unstable, grub2-themes, - nixcord, + colmena, ... } @ inputs: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; - config.allowUnfree = true; + config = { + allowUnfree = false; # sanity check + }; }; + 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 { + devShells."x86_64-linux".default = pkgs.mkShell { + shell = "${pkgs.bash}/bin/bash"; + + packages = with pkgs; [ + # ./script/* dependencies + mkpasswd + ]; + }; + nixosConfigurations = { # i be on my puter fr myputer = nixpkgs.lib.nixosSystem { - # nix passes these to every single module above - specialArgs = {inherit inputs pkgs;}; + # nix passes these to every single module + specialArgs = {inherit inputs pkgs-unstable;}; modules = [ ./hosts/myputer @@ -65,7 +60,7 @@ # my laptop 0w0 lolcathost = nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs pkgs;}; + specialArgs = {inherit inputs pkgs-unstable;}; modules = [ ./hosts/lolcathost @@ -73,5 +68,24 @@ ]; }; }; + + # remote deployment to my servers!! + colmenaHive = colmena.lib.makeHive { + meta = { + nixpkgs = pkgs; + specialArgs = {inherit pkgs-unstable;}; + + # set nixpkgs per server + nodeNixpkgs = { + hyrule = import nixpkgs { + system = "x86_64-linux"; + config.allowUnfree = false; + }; + }; + }; + + # meine vps + hyrule = import ./hosts/hyrule; + }; }; } diff --git a/homes/ae/default.nix b/homes/ae/default.nix new file mode 100644 index 0000000..3c33619 --- /dev/null +++ b/homes/ae/default.nix @@ -0,0 +1,28 @@ +{ + inputs, + outputs, + lib, + config, + pkgs, + ... +}: { + nixpkgs = { + config.allowUnfree = false; + }; + + imports = [ + ../modules/fish.nix + ../modules/bat.nix + ../modules/btop.nix + ]; + + home = { + username = "ae"; + homeDirectory = "/home/ae"; + }; + + # Nicely reload system units when changing configs + systemd.user.startServices = "sd-switch"; + + home.stateVersion = "24.11"; # DO NOT MODIFY +} diff --git a/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg b/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg deleted file mode 120000 index c9ee0b3..0000000 --- a/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg +++ /dev/null @@ -1 +0,0 @@ -openai-symbolic.svg \ No newline at end of file diff --git a/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg b/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg deleted file mode 100644 index 5e1cc19..0000000 --- a/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ai-zukijourney.png b/homes/me/ags-end4/assets/icons/ai-zukijourney.png deleted file mode 100644 index 917335e..0000000 Binary files a/homes/me/ags-end4/assets/icons/ai-zukijourney.png and /dev/null differ diff --git a/homes/me/ags-end4/assets/icons/arch-symbolic.svg b/homes/me/ags-end4/assets/icons/arch-symbolic.svg deleted file mode 100644 index 7de9094..0000000 --- a/homes/me/ags-end4/assets/icons/arch-symbolic.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg b/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg deleted file mode 100644 index 4a9db19..0000000 --- a/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg b/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg deleted file mode 100644 index bd48d3c..0000000 --- a/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg b/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg deleted file mode 100644 index 2296749..0000000 --- a/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - ionicons-v5_logos - - - - ionicons-v5_logos - - - - - - diff --git a/homes/me/ags-end4/assets/icons/debian-symbolic.svg b/homes/me/ags-end4/assets/icons/debian-symbolic.svg deleted file mode 100644 index 252f853..0000000 --- a/homes/me/ags-end4/assets/icons/debian-symbolic.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg b/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg deleted file mode 100644 index 3be4cc4..0000000 --- a/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - EndeavourOS Logo - - - - image/svg+xml - - EndeavourOS Logo - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/fedora-symbolic.svg b/homes/me/ags-end4/assets/icons/fedora-symbolic.svg deleted file mode 100644 index 1a4e8c8..0000000 --- a/homes/me/ags-end4/assets/icons/fedora-symbolic.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg b/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg deleted file mode 100644 index 0c2bf62..0000000 --- a/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Flatpak - - - - - Flatpak - - - - diff --git a/homes/me/ags-end4/assets/icons/github-symbolic.svg b/homes/me/ags-end4/assets/icons/github-symbolic.svg deleted file mode 100644 index c1c9f19..0000000 --- a/homes/me/ags-end4/assets/icons/github-symbolic.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg b/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg deleted file mode 100644 index 9de741b..0000000 --- a/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - ionicons-v5_logos - - - - - ionicons-v5_logos - - - - diff --git a/homes/me/ags-end4/assets/icons/linux-symbolic.svg b/homes/me/ags-end4/assets/icons/linux-symbolic.svg deleted file mode 100644 index 63f9c7e..0000000 --- a/homes/me/ags-end4/assets/icons/linux-symbolic.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/nixos-symbolic.svg b/homes/me/ags-end4/assets/icons/nixos-symbolic.svg deleted file mode 100644 index b697b0d..0000000 --- a/homes/me/ags-end4/assets/icons/nixos-symbolic.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ollama-symbolic.svg b/homes/me/ags-end4/assets/icons/ollama-symbolic.svg deleted file mode 100644 index 0145481..0000000 --- a/homes/me/ags-end4/assets/icons/ollama-symbolic.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/openai-symbolic.svg b/homes/me/ags-end4/assets/icons/openai-symbolic.svg deleted file mode 100644 index 8ffc912..0000000 --- a/homes/me/ags-end4/assets/icons/openai-symbolic.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg b/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg deleted file mode 100644 index 32aaaf5..0000000 --- a/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg b/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg deleted file mode 100644 index 07746c9..0000000 --- a/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt b/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt deleted file mode 100644 index d159169..0000000 --- a/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml b/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml deleted file mode 100644 index bf39bfb..0000000 --- a/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - end_4 - <_description>Catppuccin port but very random - -