Compare commits
No commits in common. "main" and "myputer" have entirely different histories.
101 changed files with 1456 additions and 4929 deletions
2
.gitignore
vendored
Normal file → Executable file
2
.gitignore
vendored
Normal file → Executable file
|
|
@ -1,6 +1,4 @@
|
||||||
ISSUES/
|
ISSUES/
|
||||||
secrets/
|
secrets/
|
||||||
nib/
|
|
||||||
|
|
||||||
result
|
result
|
||||||
rebuild*.log
|
|
||||||
|
|
|
||||||
3
DEV_ENV
Normal file
3
DEV_ENV
Normal file
|
|
@ -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`
|
||||||
109
GUIDE.md
109
GUIDE.md
|
|
@ -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 <OLD_CHANNEL>
|
|
||||||
nix-channel --add <NEW_CHANNEL> # 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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6,7 +6,3 @@ Gorgeous
|
||||||
|
|
||||||
Very nice
|
Very nice
|
||||||
https://github.com/linuxmobile/hyprland-dots
|
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/
|
|
||||||
62
README.md
Normal file → Executable file
62
README.md
Normal file → Executable file
|
|
@ -1,8 +1,11 @@
|
||||||
## My NixOS Flake
|
|
||||||
### Philosophy
|
### 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:
|
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
|
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`
|
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
|
to default to `pipewire.nix`. I haven't made alternatives yet but the idea is that it is HIGHLY likely
|
||||||
I do in future.
|
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
|
### TODO
|
||||||
There are a lot of commented `# TODO: ...` items in this repository.
|
There are a lot of `TODO` items in this repository. To improve these dotfiles
|
||||||
All (most) of my commented directives can be found via this pattern:
|
I should run a command to find files containing "TODO" and then implement the
|
||||||
```sh
|
recommendation I left behind :)
|
||||||
grep -rnE '^\s*(//|#)\s*[A-Z]*:\s*.+$' --exclude-dir=.git 2>/dev/null
|
|
||||||
```
|
|
||||||
|
|
||||||
### Random Explanation of Fonts
|
|
||||||
|
|
||||||
|
##### Small Explanation of Fonts
|
||||||
There are four types of fonts (to my knowledge at least):
|
There are four types of fonts (to my knowledge at least):
|
||||||
1. serif (funny squigles / small elegant strokes included)
|
1. serif (funny squigles / small elegant strokes included)
|
||||||
2. sans-serif (meaning "without serifs")
|
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/
|
For finding a font for programming I highly recommend trying https://www.codingfont.com/
|
||||||
|
|
||||||
|
|
||||||
### Links
|
### My config
|
||||||
#### Inspiration
|
|
||||||
##### Explaining my Vision with r/unixporn posts
|
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/
|
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!
|
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/
|
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
|
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/
|
1. https://www.wallpaperflare.com/
|
||||||
2. https://alphacoders.com
|
2. https://alphacoders.com
|
||||||
especially this one person: https://alphacoders.com/users/profile/69089/robokoboto
|
especially this one person: https://alphacoders.com/users/profile/69089/robokoboto
|
||||||
and also the lofi category: https://alphacoders.com/lofi
|
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
|
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
|
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
|
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
|
4. https://github.com/adi1090x/rofi
|
||||||
For the Rofi theme
|
For the Rofi theme
|
||||||
5. https://github.com/zDyanTB/HyprNova
|
5. https://github.com/zDyanTB/HyprNova
|
||||||
For the really cool hyprlock theme
|
For the really cool hyprlock theme
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
32
TODO.md
32
TODO.md
|
|
@ -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)
|
|
||||||
6
banner
6
banner
|
|
@ -1,6 +0,0 @@
|
||||||
.------------.
|
|
||||||
| oh my |
|
|
||||||
'------------'
|
|
||||||
^ (\_(\
|
|
||||||
'----- ( -.-)
|
|
||||||
o_(")(")
|
|
||||||
|
|
@ -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
|
|
||||||
32
deploy
32
deploy
|
|
@ -1,14 +1,11 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# TODO: use `nixos-rebuild build-vm`
|
|
||||||
|
|
||||||
usage="Usage: $(basename $0) [OPTIONS]
|
usage="Usage: $(basename $0) [OPTIONS]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-f, --fresh Remove old content in the nixstore (good for debugging)
|
-f, --fresh Remove old content in the nixstore (good for debugging)
|
||||||
-b, --bootloader Reinstall the bootloader
|
-b, --bootloader Reinstall the bootloader
|
||||||
-r, --remote Locally build and remotely deploy Colmena hive
|
|
||||||
-h, --help Show this message (^_^)"
|
-h, --help Show this message (^_^)"
|
||||||
|
|
||||||
# delete all cached entries
|
# delete all cached entries
|
||||||
|
|
@ -20,30 +17,12 @@ collect_garbage () {
|
||||||
rebuild_flake () {
|
rebuild_flake () {
|
||||||
# make sure all changes are visible to nixos
|
# make sure all changes are visible to nixos
|
||||||
git add . --verbose
|
git add . --verbose
|
||||||
local FLAGS=
|
|
||||||
if [ "$1" = "reinstall-bootloader" ]; then
|
if [ "$1" = "reinstall-bootloader" ]; then
|
||||||
FLAGS="--install-bootloader"
|
sudo nixos-rebuild switch --flake . --install-bootloader
|
||||||
# sudo nixos-rebuild switch --flake . --install-bootloader
|
else
|
||||||
# STC_DISPLAY_ALL_UNITS=1 (verbose, show output of all units)
|
sudo nixos-rebuild switch --flake .
|
||||||
|
#nixos-rebuild build --flake .# --cores 8 -j 1
|
||||||
fi
|
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
|
# check which flags were given
|
||||||
|
|
@ -51,9 +30,6 @@ flag_fresh=false
|
||||||
flag_bootloader=false
|
flag_bootloader=false
|
||||||
for flag in "$@"; do
|
for flag in "$@"; do
|
||||||
case "$flag" in
|
case "$flag" in
|
||||||
-r|--remote)
|
|
||||||
deploy_hive
|
|
||||||
exit 0 ;;
|
|
||||||
-f|--fresh)
|
-f|--fresh)
|
||||||
flag_fresh=true ;;
|
flag_fresh=true ;;
|
||||||
-b|--bootloader)
|
-b|--bootloader)
|
||||||
|
|
|
||||||
13
deploy-remote
Executable file
13
deploy-remote
Executable file
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
Building specific parts of a NixOS system
|
|
||||||
https://nixos.org/manual/nixos/stable/#sec-building-parts
|
|
||||||
721
flake.lock
generated
Normal file → Executable file
721
flake.lock
generated
Normal file → Executable file
|
|
@ -1,11 +1,82 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"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": {
|
"colmena": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nix-github-actions": "nix-github-actions",
|
"nix-github-actions": "nix-github-actions",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"stable": "stable"
|
"stable": "stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
|
@ -39,6 +110,68 @@
|
||||||
"type": "github"
|
"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": {
|
"flake-utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1659877975,
|
"lastModified": 1659877975,
|
||||||
|
|
@ -54,16 +187,38 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"grub2-themes": {
|
"gitignore": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"pre-commit-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757136219,
|
"lastModified": 1709087332,
|
||||||
"narHash": "sha256-tKU+vq34KHu/A2wD7WdgP5A4/RCmSD8hB0TyQAUlixA=",
|
"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",
|
"owner": "vinceliuice",
|
||||||
"repo": "grub2-themes",
|
"repo": "grub2-themes",
|
||||||
"rev": "80dd04ddf3ba7b284a7b1a5df2b1e95ee2aad606",
|
"rev": "42c232dfb46bf93c17506cbc1a574e5e89b5e09f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -72,6 +227,201 @@
|
||||||
"type": "github"
|
"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": {
|
"nix-github-actions": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -93,7 +443,58 @@
|
||||||
"type": "github"
|
"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": {
|
"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": {
|
"locked": {
|
||||||
"lastModified": 1734119587,
|
"lastModified": 1734119587,
|
||||||
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
|
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
|
||||||
|
|
@ -109,29 +510,13 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1761114652,
|
"lastModified": 1730808093,
|
||||||
"narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=",
|
"narHash": "sha256-oOenwoxpzQsBNi7KltgnXqq6e0+CxlfNXKn3k27w6cQ=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c",
|
"rev": "c1a390f74b2c93f69a6805142f11a215a689cec1",
|
||||||
"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",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -141,28 +526,159 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1761016216,
|
"lastModified": 1730785428,
|
||||||
"narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=",
|
"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",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "481cf557888e05d3128a76f14c76397b7d7cc869",
|
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"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": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"ags": "ags",
|
||||||
"colmena": "colmena",
|
"colmena": "colmena",
|
||||||
"grub2-themes": "grub2-themes",
|
"grub2-themes": "grub2-themes",
|
||||||
"nixpkgs": "nixpkgs_3",
|
"hyprland": "hyprland",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
"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": {
|
"stable": {
|
||||||
|
|
@ -180,6 +696,145 @@
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"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",
|
"root": "root",
|
||||||
|
|
|
||||||
98
flake.nix
Normal file → Executable file
98
flake.nix
Normal file → Executable file
|
|
@ -2,47 +2,73 @@
|
||||||
description = "Emile's Nix Dotfiles";
|
description = "Emile's Nix Dotfiles";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
# nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
|
||||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
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";
|
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 = {
|
outputs = {
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
nixpkgs-unstable,
|
#home-manager,
|
||||||
|
hyprland,
|
||||||
grub2-themes,
|
grub2-themes,
|
||||||
|
nixcord,
|
||||||
colmena,
|
colmena,
|
||||||
|
#deploy-rs,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
||||||
config = {
|
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
|
# TODO: come back to this its really cool
|
||||||
# this is just something I'm experimenting with
|
# this is just something I'm experimenting with
|
||||||
# PROJECT_ROOT = builtins.toString ./.;
|
PROJECT_ROOT = builtins.toString ./.;
|
||||||
in {
|
in {
|
||||||
|
# `nix develop` shell
|
||||||
devShells."x86_64-linux".default = pkgs.mkShell {
|
devShells."x86_64-linux".default = pkgs.mkShell {
|
||||||
shell = "${pkgs.bash}/bin/bash";
|
buildInputs = [
|
||||||
|
#colmena-new
|
||||||
packages = with pkgs; [
|
|
||||||
# ./script/* dependencies
|
|
||||||
mkpasswd
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -50,7 +76,7 @@
|
||||||
# i be on my puter fr
|
# i be on my puter fr
|
||||||
myputer = nixpkgs.lib.nixosSystem {
|
myputer = nixpkgs.lib.nixosSystem {
|
||||||
# nix passes these to every single module
|
# nix passes these to every single module
|
||||||
specialArgs = {inherit inputs pkgs-unstable;};
|
specialArgs = {inherit inputs pkgs;};
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/myputer
|
./hosts/myputer
|
||||||
|
|
@ -60,21 +86,48 @@
|
||||||
|
|
||||||
# my laptop 0w0
|
# my laptop 0w0
|
||||||
lolcathost = nixpkgs.lib.nixosSystem {
|
lolcathost = nixpkgs.lib.nixosSystem {
|
||||||
specialArgs = {inherit inputs pkgs-unstable;};
|
specialArgs = {inherit inputs pkgs;};
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/lolcathost
|
./hosts/lolcathost
|
||||||
grub2-themes.nixosModules.default
|
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!!
|
# remote deployment to my servers!!
|
||||||
colmenaHive = colmena.lib.makeHive {
|
colmenaHive = colmena.lib.makeHive {
|
||||||
meta = {
|
meta = {
|
||||||
|
# set nixpkgs global
|
||||||
nixpkgs = pkgs;
|
nixpkgs = pkgs;
|
||||||
specialArgs = {inherit pkgs-unstable;};
|
|
||||||
|
|
||||||
# set nixpkgs per server
|
# set nixpkgs per server
|
||||||
nodeNixpkgs = {
|
nodeNixpkgs = {
|
||||||
hyrule = import nixpkgs {
|
hyrule = import nixpkgs {
|
||||||
|
|
@ -82,6 +135,9 @@
|
||||||
config.allowUnfree = false;
|
config.allowUnfree = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# we can use `specialArgs.inputs` to inject wishlist into hyrule's module
|
||||||
|
#specialArgs.inputs = with inputs; {inherit wishlist;};
|
||||||
};
|
};
|
||||||
|
|
||||||
# meine vps
|
# meine vps
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
../modules/fish.nix
|
|
||||||
../modules/bat.nix
|
|
||||||
../modules/btop.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
|
|
@ -21,8 +18,39 @@
|
||||||
homeDirectory = "/home/ae";
|
homeDirectory = "/home/ae";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
};
|
||||||
|
|
||||||
# Nicely reload system units when changing configs
|
# Nicely reload system units when changing configs
|
||||||
systemd.user.startServices = "sd-switch";
|
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
|
home.stateVersion = "24.11"; # DO NOT MODIFY
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,48 +4,50 @@
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
} @ args: {
|
}: {
|
||||||
|
nixpkgs = {
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
../modules/fish.nix
|
|
||||||
../modules/btop.nix
|
|
||||||
../modules/tmux.nix
|
|
||||||
../modules/term/foot.nix
|
|
||||||
../modules/git.nix
|
../modules/git.nix
|
||||||
../modules/bat.nix
|
../modules/bat.nix
|
||||||
|
../modules/fish.nix
|
||||||
../modules/editor/helix.nix
|
../modules/editor/helix.nix
|
||||||
(import ../modules/editor/vscode.nix args)
|
|
||||||
|
|
||||||
|
../modules/btop.nix
|
||||||
|
../modules/rio.nix
|
||||||
../modules/firefox.nix
|
../modules/firefox.nix
|
||||||
../modules/apps/thunderbird.nix
|
../modules/nixcord.nix
|
||||||
|
|
||||||
#../modules/wm/hypr/hypridle.nix
|
#../modules/hypr/hypridle.nix
|
||||||
../modules/wm/hypr/hyprlock.nix
|
#../modules/hypr/hyprlock.nix
|
||||||
../modules/kanshi.nix
|
../modules/kanshi.nix
|
||||||
../modules/ags
|
../modules/ags
|
||||||
../modules/mako.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.config.allowUnfreePredicate = pkg:
|
/*
|
||||||
builtins.elem (lib.GetName pkg) [
|
programs.spicetify =
|
||||||
"vscode-extension-ms-dotnettools-csharp"
|
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 = {
|
home = {
|
||||||
username = "me";
|
username = "me";
|
||||||
homeDirectory = "/home/me";
|
homeDirectory = "/home/me";
|
||||||
|
|
||||||
shellAliases = {
|
|
||||||
brip = "batgrep"; # bat + ripgrep
|
|
||||||
man = "batman"; # bat + man
|
|
||||||
};
|
|
||||||
|
|
||||||
sessionVariables = {
|
|
||||||
NIX_SHELL_PRESERVE_PROMPT = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
pointerCursor = {
|
pointerCursor = {
|
||||||
gtk.enable = true;
|
gtk.enable = true;
|
||||||
# x11.enable = true # dont enable since im on hyprland
|
# x11.enable = true # dont enable since im on hyprland
|
||||||
|
|
@ -53,18 +55,6 @@
|
||||||
name = "Bibata-Modern-Ice";
|
name = "Bibata-Modern-Ice";
|
||||||
size = 16;
|
size = 16;
|
||||||
};
|
};
|
||||||
|
|
||||||
packages = with pkgs; [
|
|
||||||
# for services.gnome-keyring
|
|
||||||
pkgs.gcr # provides org.gnome.keyring.SystemPrompter
|
|
||||||
seahorse # gui
|
|
||||||
|
|
||||||
tor-browser
|
|
||||||
|
|
||||||
fuzzel
|
|
||||||
|
|
||||||
speedtest-cli
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
|
|
@ -81,12 +71,15 @@
|
||||||
# TODO: use a variable to mirror this cursor size
|
# TODO: use a variable to mirror this cursor size
|
||||||
# with the `home.pointerCurser.size`
|
# with the `home.pointerCurser.size`
|
||||||
cursorTheme = {
|
cursorTheme = {
|
||||||
|
# dont set the theme (use system default instead)
|
||||||
|
# only set size to match the system
|
||||||
package = pkgs.bibata-cursors;
|
package = pkgs.bibata-cursors;
|
||||||
name = "Bibata-Modern-Ice";
|
name = "Bibata-Modern-Ice";
|
||||||
size = 16;
|
size = 16;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# TODO: this lowkey doesnt work... (maybe the name "Dracula" is wrong?)
|
||||||
qt = {
|
qt = {
|
||||||
enable = true;
|
enable = true;
|
||||||
platformTheme.name = "gtk2";
|
platformTheme.name = "gtk2";
|
||||||
|
|
@ -97,29 +90,24 @@
|
||||||
# these are both required for home-manager to work
|
# these are both required for home-manager to work
|
||||||
home-manager.enable = true;
|
home-manager.enable = true;
|
||||||
|
|
||||||
zsh = {
|
# DEBUG: testing if my xdg-desktop-portal-hyprland is working or not
|
||||||
|
obs-studio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
autosuggestion.enable = true;
|
wlrobs
|
||||||
syntaxHighlighting.enable = true;
|
obs-backgroundremoval
|
||||||
|
obs-pipewire-audio-capture
|
||||||
history = {
|
];
|
||||||
size = 10000;
|
|
||||||
ignoreAllDups = true;
|
|
||||||
path = "$HOME/.zsh_history";
|
|
||||||
ignorePatterns = [
|
|
||||||
"rm *"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# set ssh profiles
|
# set ssh profiles
|
||||||
|
# (all we need is hyrule, everything else is through wishlist)
|
||||||
# NOTE: (IMPORTANT) this DOES NOT start the ssh-agent
|
# NOTE: (IMPORTANT) this DOES NOT start the ssh-agent
|
||||||
# for that you need to use `services.ssh-agent.enable`
|
# for that you need to use `services.ssh-agent.enable`
|
||||||
ssh = {
|
ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
forwardAgent = false;
|
forwardAgent = true;
|
||||||
addKeysToAgent = "no";
|
addKeysToAgent = "yes"; # always add keys to ssh-agent
|
||||||
|
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
hyrule = {
|
hyrule = {
|
||||||
|
|
@ -127,9 +115,6 @@
|
||||||
user = "ae";
|
user = "ae";
|
||||||
port = 22;
|
port = 22;
|
||||||
identityFile = "~/.ssh/id_hyrule";
|
identityFile = "~/.ssh/id_hyrule";
|
||||||
setEnv = {
|
|
||||||
TERM = "linux";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
subspace = {
|
subspace = {
|
||||||
hostname = "imbored.dev";
|
hostname = "imbored.dev";
|
||||||
|
|
@ -137,36 +122,46 @@
|
||||||
port = 22;
|
port = 22;
|
||||||
identityFile = "~/.ssh/id_subspace";
|
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
|
||||||
# enable OpenSSH private key agent
|
services.ssh-agent.enable = true;
|
||||||
ssh-agent.enable = true;
|
|
||||||
|
|
||||||
gnome-keyring.enable = true;
|
|
||||||
};
|
|
||||||
# the ssh-agent won't set this for itself...
|
# the ssh-agent won't set this for itself...
|
||||||
systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
|
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
|
# Nicely reload system units when changing configs
|
||||||
systemd.user.startServices = "sd-switch";
|
systemd.user.startServices = "sd-switch";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,24 @@
|
||||||
import { AppLauncher } from "./widgets/applauncher.js"
|
import { AppLauncher } from "./widgets/applauncher.js"
|
||||||
//import { Notifications } from "./widgets/notifications.js"
|
import { Notifications } from "./widgets/notifications.js"
|
||||||
|
|
||||||
/*
|
|
||||||
const date = Variable('', {
|
const date = Variable('', {
|
||||||
poll: [1000, 'date'],
|
poll: [1000, 'date'],
|
||||||
})
|
})
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
const Bar = (monitor = 0) => Widget.Window({
|
const Bar = (monitor = 0) => Widget.Window({
|
||||||
monitor,
|
monitor,
|
||||||
name: 'bar${monitor}',
|
name: 'bar${monitor}',
|
||||||
anchor: ['top', 'left', 'right'],
|
anchor: ['top', 'left', 'right'],
|
||||||
child: Widget.Label({ label: date.bind() }),
|
child: Widget.Label({ label: date.bind() }),
|
||||||
})
|
})
|
||||||
*/
|
|
||||||
|
|
||||||
App.config({
|
App.config({
|
||||||
style: "./style.css",
|
style: "./style.css",
|
||||||
// icons: "./assets",
|
// icons: "./assets",
|
||||||
windows: [
|
windows: [
|
||||||
//Bar(),
|
Bar(),
|
||||||
AppLauncher,
|
AppLauncher,
|
||||||
//Notifications()
|
Notifications()
|
||||||
]
|
]
|
||||||
// gtkTheme: "Adwaita-dark",
|
// gtkTheme: "Adwaita-dark",
|
||||||
// cursorTheme: "Qogir",
|
// cursorTheme: "Qogir",
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ const WINDOW_NAME = "fullscreen";
|
||||||
|
|
||||||
const Fullscreen = (children) => Widget.Box({
|
const Fullscreen = (children) => Widget.Box({
|
||||||
vertical: true,
|
vertical: true,
|
||||||
css: "background-image: url('~/downloads/wallpaper/kill-my-firstborn/astronaut-pink-blue.png');",
|
css: "background-image: url('https://images2.alphacoders.com/135/1351579.png');"
|
||||||
//+ "background-size: cover;"
|
+ "background-size: cover;"
|
||||||
//+ "background-position: center;"
|
+ "background-position: center;"
|
||||||
//+ "background-repeat: no-repeat;",
|
+ "background-repeat: no-repeat;",
|
||||||
children: children,
|
children: children,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
{...}: {
|
|
||||||
programs.thunderbird = {
|
|
||||||
enable = true;
|
|
||||||
profiles = {
|
|
||||||
"me" = {
|
|
||||||
isDefault = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -12,13 +12,4 @@
|
||||||
theme = "Dracula";
|
theme = "Dracula";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# other commands that make normal utils prettier
|
|
||||||
home.packages = with pkgs.bat-extras; [
|
|
||||||
batdiff
|
|
||||||
batgrep
|
|
||||||
batman
|
|
||||||
batwatch
|
|
||||||
prettybat
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
background_update = true;
|
background_update = true;
|
||||||
update_ms = 2000;
|
update_ms = 2000;
|
||||||
rounded_corners = false;
|
rounded_corners = false;
|
||||||
graph_symbol = "block"; # braille/block/tty
|
graph_symbol = "braille"; # braille/block/tty
|
||||||
graph_symbol_cpu = "default";
|
graph_symbol_cpu = "default";
|
||||||
graph_symbol_mem = "default";
|
graph_symbol_mem = "default";
|
||||||
graph_symbol_net = "default";
|
graph_symbol_net = "default";
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
{pkgs, ...}: {
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
# read https://docs.helix-editor.com/editor.html
|
# read https://docs.helix-editor.com/editor.html
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
theme = "dracula";
|
theme = "dracula";
|
||||||
|
|
||||||
editor = {
|
editor = {
|
||||||
line-number = "absolute";
|
line-number = "absolute";
|
||||||
popup-border = "all";
|
popup-border = "all";
|
||||||
|
|
@ -104,83 +107,29 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
languages = {
|
languages.language = [
|
||||||
language = [
|
{
|
||||||
{
|
name = "nix";
|
||||||
name = "nix";
|
indent = {
|
||||||
indent = {
|
tab-width = 2;
|
||||||
tab-width = 2;
|
unit = " ";
|
||||||
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";
|
|
||||||
};
|
};
|
||||||
# clangd for C
|
block-comment-tokens = {
|
||||||
clangd = {
|
start = "/*";
|
||||||
command = "${pkgs.clang-tools}/bin/clangd";
|
end = "*/";
|
||||||
};
|
};
|
||||||
|
auto-format = true;
|
||||||
haskell-language-server = {
|
formatter.command = "${pkgs.alejandra}/bin/alejandra";
|
||||||
command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper";
|
}
|
||||||
|
{
|
||||||
|
name = "python";
|
||||||
|
indent = {
|
||||||
|
tab-width = 4;
|
||||||
|
unit = " ";
|
||||||
};
|
};
|
||||||
|
auto-format = false; # my python is beautiful ^_^
|
||||||
# C# language services
|
rulers = [80];
|
||||||
OmniSharp = {
|
}
|
||||||
command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
|
];
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 = ...;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,69 +1,19 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
options = {
|
programs.fish = {
|
||||||
morphBashToFish = lib.mkEnableOption "morphBashToFish";
|
enable = true;
|
||||||
};
|
interactiveShellInit = ''
|
||||||
|
#set -g fish_greeting "Welcome weary traveler to my shop"
|
||||||
# TODO: make the greeting controllable (ie so my VPS can be different)
|
cat ~/banner
|
||||||
config = {
|
'';
|
||||||
programs.fish = {
|
plugins = [
|
||||||
enable = true;
|
{
|
||||||
generateCompletions = true;
|
name = "grc";
|
||||||
|
src = pkgs.fishPlugins.grc.src;
|
||||||
# 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;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,48 +5,7 @@
|
||||||
}: {
|
}: {
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
lfs.enable = true;
|
|
||||||
|
|
||||||
userName = "Emile Clark-Boman";
|
userName = "Emile Clark-Boman";
|
||||||
userEmail = "eclarkboman@gmail.com";
|
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/**";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
programs = {
|
|
||||||
obs-studio = {
|
|
||||||
enable = true;
|
|
||||||
plugins = with pkgs.obs-studio-plugins; [
|
|
||||||
wlrobs
|
|
||||||
obs-backgroundremoval
|
|
||||||
obs-pipewire-audio-capture
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -3,16 +3,8 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home = {
|
|
||||||
packages = [
|
|
||||||
pkgs.rio
|
|
||||||
];
|
|
||||||
|
|
||||||
# currently set to ghostty (on lolcathost)
|
|
||||||
#sessionVariables.TERMINAL = "rio";
|
|
||||||
};
|
|
||||||
|
|
||||||
# The terminal I use
|
# The terminal I use
|
||||||
|
# TODO: this is dependent on nvim being installed
|
||||||
# TODO: make this into a module with a configurable editor option
|
# TODO: make this into a module with a configurable editor option
|
||||||
programs.rio = {
|
programs.rio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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=<regular0> <regular3> # black-on-yellow
|
|
||||||
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
|
|
||||||
# search-box-no-match=<regular0> <regular1> # black-on-red
|
|
||||||
# search-box-match=<regular0> <regular3> # 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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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";});
|
|
||||||
#};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{...}: {
|
|
||||||
programs.tmux = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -41,27 +41,12 @@
|
||||||
user = "ae";
|
user = "ae";
|
||||||
port = 22;
|
port = 22;
|
||||||
identityFile = "~/.ssh/id_hyrule";
|
identityFile = "~/.ssh/id_hyrule";
|
||||||
setEnv = {
|
|
||||||
TERM = "linux";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
dead = {
|
YearnForTheMines = {
|
||||||
hostname = "deadlyserver.com";
|
hostname = "deadlyserver.com";
|
||||||
user = "emile";
|
user = "emile";
|
||||||
port = 29843;
|
port = 29843;
|
||||||
identityFile = "~/.ssh/id_deadlyserver";
|
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";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,28 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
inputs,
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
home-manager = builtins.fetchTarball {
|
home-manager = builtins.fetchTarball {
|
||||||
url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz";
|
url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz";
|
||||||
sha256 = "0d41gr0c89a4y4lllzdgmbm54h9kn9fjnmavwpgw0w9xwqwnzpax";
|
sha256 = "0c07xj74vsj37d3a8f98i9rhhhr99ckwlp45n40f0qkmigm3pk8s";
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
(import "${home-manager}/nixos")
|
(import "${home-manager}/nixos")
|
||||||
|
#../../flakes/wishlist/wishlist.nix
|
||||||
# ./mailserver.nix # TEMP: location
|
|
||||||
# ./minecraft-server.nix # TEMP: location
|
|
||||||
|
|
||||||
#../modules/server/nginx.nix
|
#../modules/server/nginx.nix
|
||||||
#../modules/server/ssh.nix
|
#../modules/server/ssh.nix
|
||||||
#../modules/server/fail2ban.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 = {
|
nix.settings = {
|
||||||
# make wheel group trusted users allows my "ae" user
|
# make wheel group trusted users allows my "ae" user
|
||||||
# to import packages not signed by a trusted key
|
# 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";
|
time.timeZone = "Australia/Brisbane";
|
||||||
|
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
@ -55,9 +47,16 @@ in {
|
||||||
targetHost = "imbored.dev";
|
targetHost = "imbored.dev";
|
||||||
targetUser = "ae";
|
targetUser = "ae";
|
||||||
targetPort = 22;
|
targetPort = 22;
|
||||||
sshOptions = [
|
# the following line is unnecessary if using an ssh agent
|
||||||
"-A" # forward 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
|
buildOnTarget = false; # build locally then deploy
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -85,11 +84,13 @@ in {
|
||||||
# 3306 (INTERNAL) forgejo sqlite3 database
|
# 3306 (INTERNAL) forgejo sqlite3 database
|
||||||
5000 # debug (for my job)
|
5000 # debug (for my job)
|
||||||
# 8222 (INTERNAL) vaultwarden
|
# 8222 (INTERNAL) vaultwarden
|
||||||
45000 # minecaft server
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# grant passwordless sudo to wheel group
|
||||||
|
security.sudo.wheelNeedsPassword = false;
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
defaultUserShell = pkgs.bash;
|
defaultUserShell = pkgs.bash;
|
||||||
|
|
||||||
|
|
@ -97,15 +98,19 @@ in {
|
||||||
# primary user
|
# primary user
|
||||||
ae = {
|
ae = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel"];
|
extraGroups = ["wheel" "networkmanager" "docker"];
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash;
|
||||||
openssh.authorizedKeys.keys = [
|
home = "/home/ae"; # TEMP: remove and replace with home-manager
|
||||||
"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"
|
packages = with pkgs; [
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: reduce security implications of subspace
|
subspace = let
|
||||||
subspace = {
|
# override
|
||||||
|
wishlistBash =
|
||||||
|
pkgs.bash.override {
|
||||||
|
};
|
||||||
|
in {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash;
|
||||||
home = "/home/subspace";
|
home = "/home/subspace";
|
||||||
|
|
@ -113,6 +118,15 @@ in {
|
||||||
wishlist
|
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;
|
ae = import ../../homes/ae;
|
||||||
subspace = import ../../homes/subspace;
|
subspace = import ../../homes/subspace;
|
||||||
};
|
};
|
||||||
|
sharedModules = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
|
|
@ -132,61 +147,64 @@ in {
|
||||||
# and change forgejo to use 127.0.0.2:22 (use port 22, ONLY change loopback address)
|
# and change forgejo to use 127.0.0.2:22 (use port 22, ONLY change loopback address)
|
||||||
nginx = {
|
nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# in wake of CVE-2022-3602/CVE-2022-3786
|
# in wake of CVE-2022-3602/CVE-2022-3786
|
||||||
package = pkgs.nginxStable.override {openssl = pkgs.libressl;};
|
package = pkgs.nginxStable.override {openssl = pkgs.libressl;};
|
||||||
|
|
||||||
recommendedGzipSettings = true;
|
#virtualHosts."imbored.dev".locations."/" = {
|
||||||
recommendedZstdSettings = true;
|
virtualHosts = {
|
||||||
recommendedOptimisation = true;
|
"imbored.dev" = {
|
||||||
recommendedProxySettings = true;
|
# "http:imbored.dev" = {
|
||||||
recommendedTlsSettings = true;
|
default = true;
|
||||||
|
# serverName = "imbored.dev";
|
||||||
# streamConfig = ''
|
# listenAddresses = ["imbored.dev"];
|
||||||
# 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;
|
|
||||||
enableACME = true;
|
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" ''
|
||||||
|
# <html>
|
||||||
|
# <body>
|
||||||
|
# Give me your mittens!
|
||||||
|
# </body>
|
||||||
|
# </html>
|
||||||
|
#'';
|
||||||
};
|
};
|
||||||
in {
|
# "ssh:imbored.dev" = {
|
||||||
"imbored.dev" =
|
# serverName = "imbored.dev";
|
||||||
{
|
# listen = [{
|
||||||
default = true;
|
# addr = "imbored.dev";
|
||||||
addSSL = true; # not strictly enforced <3
|
# port= 22;
|
||||||
root = "/var/www/imbored";
|
# }];
|
||||||
# extraConfig = ''
|
# locations."/".proxyPass = "ssh://127.0.0.1:2222";
|
||||||
# error_page 404 /custom_404.html;
|
# };
|
||||||
# '';
|
|
||||||
}
|
|
||||||
// std;
|
|
||||||
# Route "vault" subdomain to vaultwarden
|
# Route "vault" subdomain to vaultwarden
|
||||||
"vault.imbored.dev" =
|
"vault.imbored.dev" = {
|
||||||
{
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
locations."/".proxyPass = "${localhost}:8222";
|
locations."/".proxyPass = "http://127.0.0.1:8222";
|
||||||
}
|
};
|
||||||
// std;
|
|
||||||
# Route "forge" subdomain to forgejo
|
# Route "forge" subdomain to forgejo
|
||||||
# TODO: use `forgejo.settings.server.ENABLE_ACME` instead?
|
"forge.imbored.dev" = {
|
||||||
"forge.imbored.dev" =
|
# "https:forge.imbored.dev" = {
|
||||||
{
|
#serverName = "forge.imbored.dev";
|
||||||
forceSSL = true;
|
#listenAddresses = ["forge.imbored.dev"]; # NOTE: I think this is wrong
|
||||||
extraConfig = ''
|
enableACME = true; # TODO: maybe use `forgejo.settings.server.ENABLE_ACME` instead?
|
||||||
client_max_body_size 512M;
|
forceSSL = true;
|
||||||
'';
|
extraConfig = ''
|
||||||
locations."/".proxyPass = "${localhost}:3000";
|
client_max_body_size 512M;
|
||||||
}
|
'';
|
||||||
// std;
|
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;
|
enable = true;
|
||||||
ports = [22];
|
ports = [22];
|
||||||
settings = {
|
settings = {
|
||||||
PasswordAuthentication = false;
|
PasswordAuthentication = true;
|
||||||
PermitRootLogin = "no";
|
PermitRootLogin = "no";
|
||||||
AllowUsers = ["ae" "subspace"]; # DO NOT ALLOW ALL
|
AllowUsers = ["ae" "subspace"]; # allow all users by default
|
||||||
UseDns = true;
|
UseDns = true;
|
||||||
X11Forwarding = false;
|
X11Forwarding = false;
|
||||||
};
|
};
|
||||||
|
|
@ -216,11 +234,7 @@ in {
|
||||||
|
|
||||||
# hostname to listen for
|
# hostname to listen for
|
||||||
DOMAIN = "https://vault.imbored.dev";
|
DOMAIN = "https://vault.imbored.dev";
|
||||||
|
|
||||||
# signup policy
|
|
||||||
SIGNUPS_ALLOWED = false;
|
SIGNUPS_ALLOWED = false;
|
||||||
SIGNUPS_VERIFY = true;
|
|
||||||
INVITATIONS_ALLOWED = true;
|
|
||||||
};
|
};
|
||||||
# https://mynixos.com/nixpkgs/option/services.vaultwarden.environmentFile
|
# https://mynixos.com/nixpkgs/option/services.vaultwarden.environmentFile
|
||||||
environmentFile = "/var/lib/vaultwarden/vaultwarden.env";
|
environmentFile = "/var/lib/vaultwarden/vaultwarden.env";
|
||||||
|
|
@ -313,16 +327,13 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFAULT = {
|
DEFAULT = {
|
||||||
APP_NAME = "tearforge";
|
APP_NAME = "Emile's Forge";
|
||||||
APP_SLOGIN = "but cozy";
|
APP_SLOGIN = "Cozy";
|
||||||
APP_DISPLAY_NAME_FORMAT = "{APP_NAME} ::{APP_SLOGAN}::";
|
APP_DISPLAY_NAME_FORMAT = "{APP_NAME}: {APP_SLOGAN}";
|
||||||
};
|
};
|
||||||
|
|
||||||
repository = {
|
repository = {
|
||||||
DEFAULT_PRIVATE = "private"; # last, private, public
|
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;
|
DEFAULT_PUSH_CREATE_PRIVATE = true;
|
||||||
MAX_CREATION_LIMIT = -1;
|
MAX_CREATION_LIMIT = -1;
|
||||||
};
|
};
|
||||||
|
|
@ -348,8 +359,8 @@ in {
|
||||||
};
|
};
|
||||||
"ui.meta" = {
|
"ui.meta" = {
|
||||||
AUTHOR = "Emile Clark-Boman - emileclarkb";
|
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?";
|
DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects!";
|
||||||
KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,git,forge,forgejo,self-hosted,dobutterfliescry,butterfly,butterflies";
|
KEYWORDS = "emileclarkb,git,forge,forgejo,self-hosted";
|
||||||
};
|
};
|
||||||
|
|
||||||
markdown = {
|
markdown = {
|
||||||
|
|
@ -367,14 +378,15 @@ in {
|
||||||
# When set to “true”, the installation page is not accessible.
|
# When set to “true”, the installation page is not accessible.
|
||||||
#INSTALL_LOCK = false;
|
#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;
|
MIN_PASSWORD_LENGTH = 12;
|
||||||
PASSWORD_COMPLEXITY = "lower,upper,digit,spec";
|
PASSWORD_COMPLEXITY = "lower,upper,digit,spec";
|
||||||
PASSWORD_CHECK_PWN = true;
|
PASSWORD_CHECK_PWN = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
service = {
|
service = {
|
||||||
DISABLE_REGISTRATION = true; # toggle for new users
|
# toggle to create an admin user
|
||||||
|
DISABLE_REGISTRATION = true;
|
||||||
#DEFAULT_USER_IS_RESTRICTED = true;
|
#DEFAULT_USER_IS_RESTRICTED = true;
|
||||||
# Forbid login with third-party services (ie github)
|
# Forbid login with third-party services (ie github)
|
||||||
ALLOW_ONLY_INTERNAL_REGISTRATION = true;
|
ALLOW_ONLY_INTERNAL_REGISTRATION = true;
|
||||||
|
|
@ -430,38 +442,24 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
security = {
|
# accept Lets Encrypt's security policy (for nginx)
|
||||||
# accept Lets Encrypt's security policy (for nginx)
|
security.acme = {
|
||||||
acme = {
|
acceptTerms = true;
|
||||||
acceptTerms = true;
|
# TODO: change this to me@imbored.dev
|
||||||
# TODO: change this to me@imbored.dev
|
defaults.email = "eclarkboman@gmail.com";
|
||||||
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
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
git
|
|
||||||
vim
|
vim
|
||||||
helix
|
helix
|
||||||
|
|
||||||
|
#wishlist
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
fish.enable = true;
|
fish.enable = true;
|
||||||
|
|
||||||
bash = {
|
bash = {
|
||||||
completion.enable = true;
|
|
||||||
|
|
||||||
interactiveShellInit = ''
|
interactiveShellInit = ''
|
||||||
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
||||||
then
|
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
|
system.stateVersion = "24.11"; # DO NOT MODIFY
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
83
hosts/imbored/default.nix
Executable file
83
hosts/imbored/default.nix
Executable file
|
|
@ -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 = {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,67 +1,32 @@
|
||||||
{
|
{
|
||||||
lib,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
home-manager = builtins.fetchTarball {
|
home-manager = builtins.fetchTarball {
|
||||||
url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz";
|
url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz";
|
||||||
sha256 = "1y919cqrlmq0k44rgnacaq4zq37jj4rdh6f2swp6y2jiz28xb0iq";
|
sha256 = "15k41il0mvmwyv6jns4z8k6khhmb22jk5gpcqs1paym3l01g6abn";
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
(import "${home-manager}/nixos")
|
(import "${home-manager}/nixos")
|
||||||
|
inputs.spicetify-nix.nixosModules.default
|
||||||
../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
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nix.settings.experimental-features = [
|
programs.spicetify = let
|
||||||
"nix-command"
|
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
|
||||||
"flakes"
|
in {
|
||||||
];
|
enable = true;
|
||||||
|
enabledExtensions = with spicePkgs.extensions; [
|
||||||
nixpkgs.config.allowUnfreePredicate = let
|
adblock
|
||||||
vscext = pkgs.vscode-extensions;
|
hidePodcasts
|
||||||
whitelist = with pkgs;
|
shuffle # shuffle+ (special characters are sanitized out of extension names)
|
||||||
map lib.getName [
|
];
|
||||||
discord
|
#theme = spicePkgs.themes.catppuccin;
|
||||||
steam
|
#colorScheme = "mocha";
|
||||||
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 = {
|
boot.loader = {
|
||||||
efi = {
|
efi = {
|
||||||
|
|
@ -70,104 +35,57 @@ in {
|
||||||
};
|
};
|
||||||
grub = {
|
grub = {
|
||||||
efiSupport = true;
|
efiSupport = true;
|
||||||
|
#efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work on this system
|
||||||
device = "nodev";
|
device = "nodev";
|
||||||
useOSProber = false;
|
useOSProber = true;
|
||||||
};
|
};
|
||||||
# GitHub: vinceliuice/grub2-themes
|
# GitHub: vinceliuice/grub2-themes
|
||||||
grub2-theme = {
|
grub2-theme = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = "whitesur"; # stylish, vimix, or whitesur
|
theme = "whitesur"; # stylish, vimix, or whitesur
|
||||||
footer = true;
|
footer = true;
|
||||||
customResolution = "1920x1080";
|
customResolution = "1920x1080"; # Optional: Set a custom resolution
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
time.timeZone = "Australia/Brisbane";
|
time.timeZone = "Australia/Brisbane";
|
||||||
i18n.defaultLocale = "en_US.UTF-8"; # internationalisation
|
|
||||||
|
|
||||||
# Enable initrd hook for virtual console customisation
|
# Select internationalisation properties.
|
||||||
# aka cool colours when bootting yay!!
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
console = {
|
console = {
|
||||||
enable = true;
|
|
||||||
earlySetup = true; # initrd pre hook
|
|
||||||
keyMap = "us";
|
|
||||||
font = "Lat2-Terminus16";
|
font = "Lat2-Terminus16";
|
||||||
# ANSI 24-bit color definitions (theme: dracula)
|
keyMap = "us";
|
||||||
colors = [
|
#packages = with pkgs; [
|
||||||
"21222c"
|
# nerdfonts
|
||||||
"ff5555"
|
#];
|
||||||
"50fa7b"
|
|
||||||
"f1fa8c"
|
|
||||||
"bd93f9"
|
|
||||||
"ff79c6"
|
|
||||||
"8be9fd"
|
|
||||||
"f8f8f2"
|
|
||||||
"6272a4"
|
|
||||||
"ff6e6e"
|
|
||||||
"69ff94"
|
|
||||||
"ffffa5"
|
|
||||||
"d6acff"
|
|
||||||
"ff92df"
|
|
||||||
"a4ffff"
|
|
||||||
"ffffff"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# ----- NETWORKING -----
|
# ----- NETWORKING SECTION -----
|
||||||
networking = {
|
networking.hostName = "lolcathost";
|
||||||
hostName = "lolcathost";
|
networking.networkmanager.enable = true;
|
||||||
networkmanager.enable = true;
|
|
||||||
|
|
||||||
firewall.enable = false;
|
# Open ports in the firewall.
|
||||||
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
# Use CloudFlare's WARP+ 1.1.1.1 DNS service
|
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||||
nameservers = [
|
# Or disable the firewall altogether.
|
||||||
"1.1.1.1#one.one.one.one"
|
networking.firewall.enable = true;
|
||||||
"1.0.0.1#one.one.one.one"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# ----- SERVICES -----
|
# ----- SERVICES -----
|
||||||
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)
|
# Set display manager (login screen)
|
||||||
displayManager = {
|
displayManager = {
|
||||||
# sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects
|
# sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects
|
||||||
sddm = {
|
sddm = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wayland.enable = true; # experimental
|
wayland.enable = true; # enable experimental sddm support for wayland
|
||||||
theme = "corners";
|
theme = "corners";
|
||||||
};
|
};
|
||||||
defaultSession =
|
defaultSession = "hyprland";
|
||||||
"hyprland"
|
|
||||||
+ (
|
|
||||||
if config.programs.hyprland.withUWSM == true
|
|
||||||
then "-uwsm"
|
|
||||||
else null
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# dbus = {
|
# Enable sound
|
||||||
# # NOTE: programs.uwsm.enable sets implementation to dbus-broker,
|
#hardware.pulseaudio.enable = false;
|
||||||
# # NOTE: however this seems to break dbus
|
|
||||||
# implementation = lib.mkForce "dbus";
|
|
||||||
# };
|
|
||||||
|
|
||||||
# Multimedia Framework
|
|
||||||
# With backwards compatability for alsa/pulseaudio/jack
|
|
||||||
pipewire = {
|
pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wireplumber.enable = true;
|
wireplumber.enable = true;
|
||||||
|
|
@ -178,7 +96,7 @@ in {
|
||||||
jack.enable = true;
|
jack.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Touchpad support
|
# Enable touchpad support
|
||||||
libinput.enable = true;
|
libinput.enable = true;
|
||||||
|
|
||||||
tumbler.enable = true; # Thunar image thumbnail support
|
tumbler.enable = true; # Thunar image thumbnail support
|
||||||
|
|
@ -186,159 +104,88 @@ in {
|
||||||
};
|
};
|
||||||
security.rtkit.enable = true; # I *think* this is for pipewire
|
security.rtkit.enable = true; # I *think* this is for pipewire
|
||||||
|
|
||||||
# ------- USERS -------
|
# allow wheel group to use passwordless sudo
|
||||||
users = {
|
users = {
|
||||||
# Using fish as the login shell tends to go very poorly because it isn't
|
# using fish as the login shell tends
|
||||||
# POSIX compliant, so we default the login shell to Bash instead :)
|
# to go very poorly because it isn't
|
||||||
|
# POSIX compliant, so we'll just use
|
||||||
|
# simple Bash then :)
|
||||||
defaultUserShell = pkgs.bash;
|
defaultUserShell = pkgs.bash;
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
# literally me fr (personal account)
|
# literally me fr (personal account)
|
||||||
me = {
|
me = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel" "netdev" "docker"];
|
extraGroups = ["wheel"];
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash; #pkgs.fish
|
||||||
packages = let
|
packages = with pkgs; [
|
||||||
# TODO: can I just do this: https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#url-like-syntax
|
firefox
|
||||||
# instead to use colmena's flake.nix by specifying a rev hash in the flake input?
|
nitch
|
||||||
colmena-src = pkgs.fetchFromGitHub {
|
starfetch
|
||||||
owner = "zhaofengli";
|
|
||||||
repo = "colmena";
|
|
||||||
rev = "47b6414d800c8471e98ca072bc0835345741a56a";
|
|
||||||
sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=";
|
|
||||||
};
|
|
||||||
colmena-latest = pkgs.callPackage "${colmena-src}/package.nix" {};
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
firefox
|
|
||||||
nitch
|
|
||||||
starfetch
|
|
||||||
|
|
||||||
colmena-latest
|
# flatpak requires gnome-software
|
||||||
|
# for graphical applications
|
||||||
gitkraken
|
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
|
# user for friends to ssh into
|
||||||
friends = {
|
friends = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
|
packages = with pkgs; [
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.me = import ../../homes/me;
|
users.me = import ../../homes/me;
|
||||||
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
|
||||||
sharedModules = [
|
sharedModules = [
|
||||||
|
inputs.nixcord.homeManagerModules.nixcord
|
||||||
inputs.ags.homeManagerModules.default
|
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 -----
|
# ---- SYSTEM PACKAGES -----
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# User Environment
|
# User Environment
|
||||||
# crywl
|
inputs.swww.packages.${pkgs.system}.swww
|
||||||
swww
|
|
||||||
helvum
|
helvum
|
||||||
easyeffects
|
easyeffects
|
||||||
pavucontrol
|
|
||||||
ani-cli
|
ani-cli
|
||||||
bluetui
|
|
||||||
wl-clipboard # clipboard for wayland
|
wl-clipboard # clipboard for wayland
|
||||||
qbittorrent # torrenting
|
hyprpicker
|
||||||
signal-desktop
|
|
||||||
|
|
||||||
(callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners
|
(callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners
|
||||||
# dependencies for my sddm theme:
|
# dependencies for my sddm theme:
|
||||||
pkgs.libsForQt5.qt5.qtgraphicaleffects
|
pkgs.libsForQt5.qt5.qtgraphicaleffects
|
||||||
|
|
||||||
# Shell
|
python311 # I use 3.11 since it's in a pretty stable state now
|
||||||
bash
|
poetry # python dependency management and packaging
|
||||||
fish
|
|
||||||
shellcheck
|
# fish plugins
|
||||||
grc # colorise command outputs
|
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
|
httpie
|
||||||
curlie
|
curlie
|
||||||
|
|
@ -346,55 +193,44 @@ in {
|
||||||
doggo
|
doggo
|
||||||
tldr
|
tldr
|
||||||
btop
|
btop
|
||||||
eza
|
|
||||||
yazi
|
|
||||||
lazygit
|
|
||||||
ripgrep
|
|
||||||
viddy # modern `watch` command
|
|
||||||
thefuck
|
|
||||||
timg # terminal image (sixel) viewer
|
|
||||||
|
|
||||||
# Pretty necessary
|
# Pretty necessary
|
||||||
git
|
git
|
||||||
git-filter-repo
|
|
||||||
brightnessctl
|
brightnessctl
|
||||||
acpi
|
acpi
|
||||||
# upower
|
|
||||||
vim
|
vim
|
||||||
powertop
|
|
||||||
imagemagick
|
|
||||||
|
|
||||||
# "Standard" Unix Commands
|
# Unix Commands
|
||||||
file
|
|
||||||
wget
|
wget
|
||||||
tree
|
tree
|
||||||
pstree
|
|
||||||
unzip
|
unzip
|
||||||
unrar-free
|
|
||||||
lz4
|
|
||||||
man-pages
|
|
||||||
man-pages-posix
|
|
||||||
|
|
||||||
# Cryptography
|
|
||||||
gnupg
|
|
||||||
openssl
|
|
||||||
libargon2
|
|
||||||
|
|
||||||
# Games
|
|
||||||
prismlauncher # minecraft
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Enable the use of certain programs
|
||||||
programs = {
|
programs = {
|
||||||
crywl = {
|
hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
xwayland.enable = false;
|
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||||
defaultSession = false;
|
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||||
useUnmodifiedDWL = false;
|
|
||||||
|
xwayland.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
zsh.enable = true;
|
||||||
fish.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 also uses: `services.tumbler` & `services.gvfs`
|
||||||
thunar = {
|
thunar = {
|
||||||
|
|
@ -405,74 +241,57 @@ in {
|
||||||
thunar-media-tags-plugin # change metadata for media files
|
thunar-media-tags-plugin # change metadata for media files
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# mozilla's email client
|
|
||||||
thunderbird.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# ----- FONTS -----
|
# ----- FONTS -----
|
||||||
fonts = {
|
fonts = {
|
||||||
enableDefaultPackages = true; # no clue what this line does tbh
|
enableDefaultPackages = true; # no clue what this line does tbh
|
||||||
packages = with pkgs;
|
packages = with pkgs; [
|
||||||
[
|
#(nerdfonts.override {
|
||||||
#(nerdfonts.override {
|
# fonts = [
|
||||||
# fonts = [
|
# "Cousine"
|
||||||
# "Cousine"
|
# "Iosevka"
|
||||||
# "Iosevka"
|
# "JetBrainsMono"
|
||||||
# "JetBrainsMono"
|
# ];
|
||||||
# ];
|
# })
|
||||||
# })
|
nerdfonts
|
||||||
|
geist-font # for my hyprlock theme
|
||||||
|
|
||||||
geist-font # for my hyprlock theme
|
# texlive maintains a noto-emoji flake
|
||||||
# texlive maintains a noto-emoji flake
|
texlivePackages.noto-emoji
|
||||||
texlivePackages.noto-emoji
|
];
|
||||||
]
|
|
||||||
++ builtins.filter lib.attrsets.isDerivation (
|
|
||||||
builtins.attrValues pkgs.nerd-fonts
|
|
||||||
);
|
|
||||||
|
|
||||||
# TODO: change my default fonts
|
# TODO: change my default fonts
|
||||||
fontconfig = {
|
fontconfig = {
|
||||||
defaultFonts = {
|
defaultFonts = {
|
||||||
serif = ["Geist"]; # TODO: package Iosevka Etoile since Iosevka isn't a serif font
|
serif = ["Iosevka"]; # TODO: package Iosevka Etoile since Iosevka isn't a serif font
|
||||||
sansSerif = ["Geist"];
|
sansSerif = ["Iosevka "];
|
||||||
monospace = ["Cousine"];
|
monospace = ["Cousine"];
|
||||||
emoji = ["Noto Emoji"];
|
emoji = ["Noto Emoji"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
documentation = {
|
# Enable the new CLI commands and the flakes as experimental features
|
||||||
enable = true;
|
nix.settings.experimental-features = [
|
||||||
doc.enable = true; # install /share/doc packages
|
"nix-command"
|
||||||
man.enable = true; # install manpages
|
"flakes"
|
||||||
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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
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 = {
|
hardware = {
|
||||||
graphics = {
|
graphics.enable = true;
|
||||||
enable = true;
|
|
||||||
enable32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# opengl = {
|
|
||||||
# enable = true;
|
|
||||||
# driSupport = true;
|
|
||||||
# driSupport32Bit = true;
|
|
||||||
# }
|
|
||||||
|
|
||||||
bluetooth = {
|
|
||||||
enable = true;
|
|
||||||
powerOnBoot = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# DO NOT MODIFY
|
# DO NOT MODIFY
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
(callPackage ../packages/angryoxide {})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{...}: {
|
|
||||||
programs.winbox = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = false; # port: 5678
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
(callPackage ../packages/chameleonultragui {})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
# flipper zero desktop app
|
|
||||||
qflipper
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
obsidian
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
})
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.defaultPackages = with pkgs; [
|
|
||||||
hyprsunset
|
|
||||||
];
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
hyprland = {
|
|
||||||
enable = true;
|
|
||||||
withUWSM = true; # Universal Wayland Session Manager
|
|
||||||
xwayland.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{...}: {
|
|
||||||
programs = {
|
|
||||||
river.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,167 +1,87 @@
|
||||||
{
|
{
|
||||||
lib,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
lib,
|
||||||
|
wishlist,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
home-manager = builtins.fetchTarball {
|
home-manager = builtins.fetchTarball {
|
||||||
url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz";
|
url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz";
|
||||||
sha256 = "0q3lv288xlzxczh6lc5lcw0zj9qskvjw3pzsrgvdh8rl8ibyq75s";
|
sha256 = "1dga3vsd60v9mfyhwgbil13mrchw5crbpgh4zjw9fghv1vyk89vq";
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
(import "${home-manager}/nixos")
|
(import "${home-manager}/nixos")
|
||||||
|
inputs.spicetify-nix.nixosModules.default
|
||||||
../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
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nix.settings = {
|
programs.spicetify = let
|
||||||
experimental-features = [
|
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
|
||||||
"nix-command"
|
in {
|
||||||
"flakes"
|
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 = {
|
boot.loader = {
|
||||||
efi = {
|
efi = {
|
||||||
canTouchEfiVariables = true;
|
canTouchEfiVariables = true;
|
||||||
efiSysMountPoint = "/boot/efi";
|
efiSysMountPoint = "/boot/efi"; #/boot/efi
|
||||||
};
|
};
|
||||||
grub = {
|
grub = {
|
||||||
efiSupport = true;
|
efiSupport = true;
|
||||||
|
#efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work on this system
|
||||||
device = "nodev";
|
device = "nodev";
|
||||||
# useOSProber = true;
|
#useOSProber = true;
|
||||||
};
|
};
|
||||||
# GitHub: vinceliuice/grub2-themes
|
|
||||||
grub2-theme = {
|
grub2-theme = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = "whitesur"; # stylish, vimix, or whitesur
|
theme = "whitesur"; # stylish, vimix, or whitesur
|
||||||
footer = true;
|
footer = true;
|
||||||
# TODO: switch my cables to switch default grub display
|
customResolution = "1920x1080";
|
||||||
customResolution = "3840x2160";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
time.timeZone = "Australia/Brisbane";
|
time.timeZone = "Australia/Brisbane";
|
||||||
i18n.defaultLocale = "en_US.UTF-8"; # internationalisation
|
|
||||||
|
|
||||||
# Enable initrd hook for virtual console customisation
|
# Select internationalisation properties.
|
||||||
# aka cool colours when bootting yay!!
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
console = {
|
console = {
|
||||||
enable = true;
|
|
||||||
earlySetup = true; # initrd pre hook
|
|
||||||
keyMap = "us";
|
|
||||||
font = "Lat2-Terminus16";
|
font = "Lat2-Terminus16";
|
||||||
# ANSI 24-bit color definitions (theme: dracula)
|
keyMap = "us";
|
||||||
colors = [
|
|
||||||
"21222c"
|
|
||||||
"ff5555"
|
|
||||||
"50fa7b"
|
|
||||||
"f1fa8c"
|
|
||||||
"bd93f9"
|
|
||||||
"ff79c6"
|
|
||||||
"8be9fd"
|
|
||||||
"f8f8f2"
|
|
||||||
"6272a4"
|
|
||||||
"ff6e6e"
|
|
||||||
"69ff94"
|
|
||||||
"ffffa5"
|
|
||||||
"d6acff"
|
|
||||||
"ff92df"
|
|
||||||
"a4ffff"
|
|
||||||
"ffffff"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# ----- NETWORKING -----
|
# ----- NETWORKING SECTION -----
|
||||||
networking = {
|
networking.hostName = "myputer";
|
||||||
hostName = "myputer";
|
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||||
networkmanager.enable = true;
|
|
||||||
|
|
||||||
firewall = {
|
# Open ports in the firewall.
|
||||||
enable = true;
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
allowedTCPPorts = [
|
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||||
22 # SSH
|
# Or disable the firewall altogether.
|
||||||
80 # HTTP
|
networking.firewall.enable = true;
|
||||||
443 # HTTPS
|
|
||||||
5678 # MikroTik WinBox
|
|
||||||
25565 # Minecraft LAN
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# ----- SERVICES -----
|
# ----- SERVICES -----
|
||||||
services = {
|
services = {
|
||||||
# Set display manager (login screen)
|
# Set display manager (login screen)
|
||||||
displayManager = {
|
displayManager = {
|
||||||
# sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects
|
|
||||||
sddm = {
|
sddm = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wayland.enable = true; # experimental
|
wayland.enable = true; # enable experimental sddm support for wayland
|
||||||
theme = "corners";
|
theme = "corners";
|
||||||
};
|
};
|
||||||
defaultSession =
|
defaultSession = "hyprland";
|
||||||
"hyprland"
|
|
||||||
+ (
|
|
||||||
if config.programs.hyprland.withUWSM
|
|
||||||
then "-uwsm"
|
|
||||||
else null
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Multimedia Framework
|
# Enable sound
|
||||||
# With backwards compatability for alsa/pulseaudio/jack
|
|
||||||
pipewire = {
|
pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wireplumber.enable = true;
|
wireplumber.enable = true;
|
||||||
|
|
@ -177,19 +97,21 @@ in {
|
||||||
};
|
};
|
||||||
security.rtkit.enable = true; # I *think* this is for pipewire
|
security.rtkit.enable = true; # I *think* this is for pipewire
|
||||||
|
|
||||||
# ------- USERS -------
|
# allow wheel group to use passwordless sudo
|
||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
users = {
|
users = {
|
||||||
# Using fish as the login shell tends to go very poorly because it isn't
|
# using fish as the login shell tends
|
||||||
# POSIX compliant, so we default the login shell to Bash instead :)
|
# to go very poorly because it isn't
|
||||||
|
# POSIX compliant, so we'll just use
|
||||||
|
# simple Bash then :)
|
||||||
defaultUserShell = pkgs.bash;
|
defaultUserShell = pkgs.bash;
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
# just me fr (personal account)
|
# just me fr (personal account)
|
||||||
me = {
|
me = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel" "netdev" "docker"];
|
extraGroups = ["wheel" "docker"];
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash; #pkgs.fish
|
||||||
packages = let
|
packages = let
|
||||||
# TODO: can I just do this: https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#url-like-syntax
|
# 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?
|
# instead to use colmena's flake.nix by specifying a rev hash in the flake input?
|
||||||
|
|
@ -199,14 +121,18 @@ in {
|
||||||
rev = "47b6414d800c8471e98ca072bc0835345741a56a";
|
rev = "47b6414d800c8471e98ca072bc0835345741a56a";
|
||||||
sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=";
|
sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=";
|
||||||
};
|
};
|
||||||
colmena-latest = pkgs.callPackage "${colmena-src}/package.nix" {};
|
colmena-new = pkgs.callPackage "${colmena-src}/package.nix" {};
|
||||||
in
|
in
|
||||||
with pkgs; [
|
with pkgs; [
|
||||||
firefox
|
firefox
|
||||||
nitch
|
nitch
|
||||||
starfetch
|
starfetch
|
||||||
|
|
||||||
colmena-latest
|
# flatpak requires gnome-software
|
||||||
|
flatpak
|
||||||
|
gnome-software
|
||||||
|
|
||||||
|
colmena-new
|
||||||
|
|
||||||
gitkraken
|
gitkraken
|
||||||
# NOTE: downloadthing this causes my PC to freak!! ("too many open files" error)
|
# NOTE: downloadthing this causes my PC to freak!! ("too many open files" error)
|
||||||
|
|
@ -218,177 +144,83 @@ in {
|
||||||
ae = {
|
ae = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel"];
|
extraGroups = ["wheel"];
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash; #pkgs.fish
|
||||||
|
packages = with pkgs; [
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.me = import ../../homes/me;
|
users.me = import ../../homes/me;
|
||||||
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
|
||||||
sharedModules = [
|
sharedModules = [
|
||||||
|
inputs.nixcord.homeManagerModules.nixcord
|
||||||
inputs.ags.homeManagerModules.default
|
inputs.ags.homeManagerModules.default
|
||||||
|
{nixpkgs.overlays = [inputs.hyprpanel.overlay];}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ---- ENVIRONMENT VARIABLES ----
|
# set environment variables
|
||||||
environment = {
|
environment.sessionVariables = {
|
||||||
# always install "dev" derivation outputs
|
# folder names with capitalisation look awful!
|
||||||
extraOutputsToInstall = ["dev" "man"];
|
XDG_DOWNLOAD_DIR = "$HOME/downloads";
|
||||||
|
|
||||||
sessionVariables = {
|
# Hint Electrons apps to use Wayland
|
||||||
# folder names with capitalisation look awful!
|
NIXOS_OZONE_WL = "1";
|
||||||
XDG_DOWNLOAD_DIR = "$HOME/downloads";
|
|
||||||
|
|
||||||
# Hint Electrons apps to use Wayland
|
|
||||||
NIXOS_OZONE_WL = "1";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# ---- SYSTEM PACKAGES -----
|
# ---- SYSTEM PACKAGES -----
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# User Environment
|
# User Environment
|
||||||
swww
|
inputs.swww.packages.${pkgs.system}.swww
|
||||||
helvum
|
helvum
|
||||||
easyeffects
|
easyeffects
|
||||||
pavucontrol
|
pavucontrol
|
||||||
ani-cli
|
ani-cli
|
||||||
bluetui
|
|
||||||
wl-clipboard # clipboard for wayland
|
wl-clipboard # clipboard for wayland
|
||||||
hyprpicker
|
hyprpicker
|
||||||
hyprshot # screenshot utility
|
|
||||||
qbittorrent
|
|
||||||
signal-desktop
|
|
||||||
kdePackages.gwenview # image viewer
|
|
||||||
libreoffice
|
|
||||||
|
|
||||||
# TEST: WARNING
|
#(callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners
|
||||||
# ospd-openvas
|
|
||||||
# openvas-scanner
|
|
||||||
# openvas-smb
|
|
||||||
|
|
||||||
(callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners
|
|
||||||
# dependencies for my sddm theme:
|
# dependencies for my sddm theme:
|
||||||
pkgs.libsForQt5.qt5.qtgraphicaleffects
|
pkgs.libsForQt5.qt5.qtgraphicaleffects
|
||||||
|
|
||||||
# Shell
|
python311 # I use 3.11 since it's in a pretty stable state now
|
||||||
bash
|
poetry # python dependency management and packaging
|
||||||
fish
|
|
||||||
shellcheck
|
nixd # lsp for nix
|
||||||
|
|
||||||
|
neofetch # TODO: remove (installed to debug something)
|
||||||
|
|
||||||
|
# fish plugins
|
||||||
grc # colorise command outputs
|
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
|
httpie
|
||||||
curlie
|
curlie
|
||||||
zoxide
|
zoxide
|
||||||
doggo
|
doggo
|
||||||
tldr
|
tldr
|
||||||
# btop
|
#btop
|
||||||
eza
|
|
||||||
yazi
|
|
||||||
lazygit
|
|
||||||
ripgrep
|
|
||||||
viddy # modern `watch` command
|
|
||||||
thefuck
|
|
||||||
|
|
||||||
tesseract # for my work with Agribit
|
tesseract # for my work with Agribit
|
||||||
|
|
||||||
# TODO: once upgraded past Nix-24.07 this line won't be necessary (I think)
|
# TODO: remove this and host my nix flake on github instead
|
||||||
# helix will support nixd by default
|
#wishlist
|
||||||
# SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix
|
|
||||||
# nixd # lsp for nix # DEBUG
|
|
||||||
|
|
||||||
# Pretty necessary
|
# Pretty necessary
|
||||||
git
|
git
|
||||||
git-filter-repo
|
|
||||||
nix-prefetch-git
|
|
||||||
brightnessctl
|
brightnessctl
|
||||||
acpi
|
acpi
|
||||||
vim
|
vim
|
||||||
powertop
|
nix-prefetch-git
|
||||||
imagemagick
|
|
||||||
|
|
||||||
# "Standard" Unix Commands
|
# Unix Commands
|
||||||
file
|
|
||||||
wget
|
wget
|
||||||
tree
|
tree
|
||||||
pstree
|
|
||||||
unzip
|
unzip
|
||||||
unrar-free
|
|
||||||
lz4
|
|
||||||
man-pages
|
|
||||||
man-pages-posix
|
|
||||||
|
|
||||||
# Cryptography
|
# Cryptography
|
||||||
gnupg
|
|
||||||
openssl
|
openssl
|
||||||
libargon2
|
libargon2
|
||||||
|
|
||||||
# Games
|
|
||||||
prismlauncher # minecraft
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# DEBUG: configuring xdg portal here instead?
|
# DEBUG: configuring xdg portal here instead?
|
||||||
|
|
@ -407,12 +239,20 @@ in {
|
||||||
# ];
|
# ];
|
||||||
#};
|
#};
|
||||||
|
|
||||||
|
# Enable the use of certain programs
|
||||||
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;
|
zsh.enable = true;
|
||||||
fish.enable = true;
|
fish.enable = true;
|
||||||
|
|
||||||
nix-ld.enable = true;
|
|
||||||
|
|
||||||
neovim = {
|
neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultEditor = 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 = {
|
thunar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
plugins = with pkgs.xfce; [
|
plugins = with pkgs.xfce; [
|
||||||
|
|
@ -439,45 +292,32 @@ in {
|
||||||
|
|
||||||
# mozilla's email client
|
# mozilla's email client
|
||||||
thunderbird.enable = true;
|
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 -----
|
||||||
fonts = {
|
fonts = {
|
||||||
enableDefaultPackages = true; # no clue what this line does tbh
|
enableDefaultPackages = true; # no clue what this line does tbh
|
||||||
packages = with pkgs;
|
packages = with pkgs; [
|
||||||
[
|
/*
|
||||||
# (nerdfonts.override {
|
(nerdfonts.override {
|
||||||
# fonts = [
|
fonts = [
|
||||||
# "Cousine" # its ok i guess
|
"Cousine" # its already i guess
|
||||||
# "Iosevka" # nah nah
|
"Iosevka" # nah nah
|
||||||
# "IosevkaTerm" # big nah
|
"IosevkaTerm" # big nah
|
||||||
# "CascadiaCode" # potential
|
"CascadiaCode" # potential
|
||||||
# "FiraCode" # potential
|
"FiraCode" # potential
|
||||||
# "JetBrainsMono" # for my rofi theme
|
"JetBrainsMono" # for my rofi theme
|
||||||
# "Hasklig"
|
"Hasklig"
|
||||||
# "Hack"
|
"Hack"
|
||||||
# ];
|
];
|
||||||
# })
|
})
|
||||||
|
*/
|
||||||
|
nerdfonts
|
||||||
|
geist-font # for my hyprlock theme
|
||||||
|
|
||||||
geist-font # for my hyprlock theme
|
# texlive maintains a noto-emoji flake
|
||||||
# texlive maintains a noto-emoji flake
|
texlivePackages.noto-emoji
|
||||||
texlivePackages.noto-emoji
|
];
|
||||||
]
|
|
||||||
++ builtins.filter lib.attrsets.isDerivation (
|
|
||||||
builtins.attrValues pkgs.nerd-fonts
|
|
||||||
);
|
|
||||||
|
|
||||||
# TODO: change my default fonts
|
# TODO: change my default fonts
|
||||||
fontconfig = {
|
fontconfig = {
|
||||||
|
|
@ -490,37 +330,28 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
documentation = {
|
# Enable the new CLI commands and the flakes as experimental features
|
||||||
enable = true;
|
nix.settings.experimental-features = [
|
||||||
doc.enable = true; # install /share/doc packages
|
"nix-command"
|
||||||
man.enable = true; # install manpages
|
"flakes"
|
||||||
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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
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 = {
|
hardware = {
|
||||||
graphics = {
|
graphics.enable = true;
|
||||||
enable = true;
|
|
||||||
enable32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# opengl = {
|
|
||||||
# enable = true;
|
|
||||||
# driSupport = true;
|
|
||||||
# driSupport32Bit = true;
|
|
||||||
# }
|
|
||||||
|
|
||||||
bluetooth = {
|
|
||||||
enable = true;
|
|
||||||
powerOnBoot = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# DO NOT MODIFY
|
# DO NOT MODIFY
|
||||||
|
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
- [ ] Try using `gitHashes` argument instead of patching? (on chameleonultragui package)
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
@ -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
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
@ -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
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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 <BUILD-DIR> <SRC-DIR>` ie `meson setup build src`.
|
|
||||||
Compile meson like `meson compile -C <BUILD-DIR>` where <BUILD-DIR> 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`.
|
|
||||||
62
hosts/packages/tundra/flake.lock
generated
62
hosts/packages/tundra/flake.lock
generated
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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<string, Gtk.Widget> items = new HashTable<string, Gtk.Widget>(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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{pkgs}: {
|
{pkgs}: {
|
||||||
sddm-theme-corners = pkgs.stdenv.mkDerivation {
|
sddm-theme-corners = pkgs.stdenv.mkDerivation rec {
|
||||||
name = "sddm-theme-corners";
|
name = "sddm-theme-corners";
|
||||||
version = "1.0.0";
|
#version = "1.0";
|
||||||
|
#dontBuild = true;
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/share/sddm/themes
|
mkdir -p $out/share/sddm/themes
|
||||||
cp -ar $src/corners $out/share/sddm/themes/
|
cp -ar $src/corners $out/share/sddm/themes/
|
||||||
|
|
|
||||||
0
modules/core/sound/default.nix
Executable file
0
modules/core/sound/default.nix
Executable file
|
|
@ -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,
|
pkgs,
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
options.hyprland = {
|
options.hyprland = {
|
||||||
enable = lib.mkEnableOption "Hyprland";
|
enable = lib.mkEnableOption "Hyprland";
|
||||||
};
|
};
|
||||||
1
result
Symbolic link
1
result
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/clc95m2c889yns3n8c71vfgb1q2qd419-nixos-system-myputer-24.11.20250212.0ff09db
|
||||||
44
scripts/box
44
scripts/box
|
|
@ -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
|
|
||||||
|
|
@ -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 $@
|
|
||||||
18
scripts/huhh
18
scripts/huhh
|
|
@ -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)}'
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
# USAGE: lsyscalls | sort [-nk2]
|
|
||||||
|
|
||||||
echo -e '#include <sys/syscall.h>'\
|
|
||||||
| cpp -dM \
|
|
||||||
| grep "#define __NR_.*[0-9]$" \
|
|
||||||
| cut -d_ -f 4-
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
nix-store -q --references /var/run/current-system/sw \
|
|
||||||
| cut -d'-' -f2-
|
|
||||||
|
|
@ -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 <port> <cmd> <args...>"
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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<PAD; i++)); do
|
|
||||||
printf " "
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function fmt_print {
|
|
||||||
set +u
|
|
||||||
local SERVICE=$1
|
|
||||||
local LPAD=$2
|
|
||||||
local ACTIVE=$3
|
|
||||||
local ENABLED=$4
|
|
||||||
|
|
||||||
if [ "$ACTIVE" = "NOTFOUND" ]; then
|
|
||||||
ACTIVE="\e[1m\e[31m$ACTIVE\e[0m"
|
|
||||||
elif [ "$ACTIVE" = "inactive" ]; then
|
|
||||||
ACTIVE="\e[1m\e[31m$ACTIVE\e[0m"
|
|
||||||
else
|
|
||||||
ACTIVE="\e[32m$ACTIVE\e[0m"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ENABLED" = "enabled" ]; then
|
|
||||||
ENABLED="[\e[32m$ENABLED\e[0m]"
|
|
||||||
elif [ "$ENABLED" = "disabled" ]; then
|
|
||||||
ENABLED="[\e[1m\e[33m$ENABLED\e[0m]"
|
|
||||||
fi
|
|
||||||
set -u
|
|
||||||
echo -e "\e[35m[*]\e[0m $SERVICE:$LPAD $ACTIVE $ENABLED"
|
|
||||||
}
|
|
||||||
|
|
||||||
function fmt_test_service (
|
|
||||||
local SERVICE=$1
|
|
||||||
local LPAD_SZ=$2 # service name lpad size
|
|
||||||
local LPAD=$(pad $LPAD_SZ)
|
|
||||||
|
|
||||||
local EXISTS=0
|
|
||||||
local STAT=$(systemctl status "$SERVICE" 2>/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
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue