My self-hosting infrastructure, fully automated from empty disk to operating services

Overview

Khue's Homelab

chat tag document license stars

Current status: ALPHA

This project utilizes Infrastructure as Code to automate provisioning, operating, and updating self-hosted services in my homelab. It can be used as a highly customizable framework to build your own homelab.

Overview

This section provides a high level overview of the project. For further information, please see the documentation.

Hardware

Hardware

  • 4 × NEC SFF PC-MK26ECZDR (Japanese version of the ThinkCentre M700):
    • CPU: Intel Core i5-6600T @ 2.70GHz
    • RAM: 16GB
    • SSD: 128GB
  • TP-Link TL-SG108 switch:
    • Ports: 8
    • Speed: 1000Mbps

Features

Project status: Alpha (see roadmap below)

  • Common applications: Gitea, Seafile, Jellyfin, Paperless...
  • Automated bare metal provisioning with PXE boot
  • Automated Kubernetes installation and management
  • Installing and managing applications using GitOps
  • Modular architecture, easy to add or remove features/components
  • Automated certificate management
  • Automatically update DNS records for exposed services
  • Expose services to the internet securely with Cloudflare Tunnel
  • CI/CD platform
  • Private container registry
  • Distributed storage
  • Monitoring and alerting 🚧
  • Support multiple environments (dev, stag, prod) 🚧
  • Automated offsite backups 🚧
  • Single sign-on 🚧

Screenshots of some user-facing applications are shown here, I will update them before each release. They can't capture all of the project's features, but they are sufficient to get a concept of it.

Homepage with Ingress discovery powered by Hajimari
Git server powered by Gitea
Continuous integration with Tekton
Continuous deployment with ArgoCD
Monitoring dashboard powered by Grafana
Matrix chat server powered by Element and Dendrite
Cluster management using Lens (or you can just use kubectl)
Secret management with Vault

Tech stack

Logo Name Description
Ansible Automate bare metal provisioning and configuration
ArgoCD GitOps tool built to deploy applications to Kubernetes
cert-manager Cloud native certificate management
Cloudflare DNS and Tunnel
Docker Ephermeral PXE server and convenient tools container
Gitea Self-hosted Git service
Grafana Operational dashboards
Helm The package manager for Kubernetes
K3s Lightweight distribution of Kubernetes
Kubernetes Container-orchestration system, the backbone of this project
Loki Log aggregation system
Longhorn Cloud native distributed block storage for Kubernetes
MetalLB Bare metal load-balancer for Kubernetes
NGINX Kubernetes Ingress Controller
Prometheus Systems monitoring and alerting toolkit
Rocky Linux Base OS for Kubernetes nodes
Tekton Cloud native solution for building CI/CD systems
Trow Private container registry
Vault Secrets and encryption management system

Get Started

Roadmap

See roadmap and open issues for a list of proposed features and known issues.

Contributing

Any contributions you make, either big or small, are greatly appreciated.

License

Copyright (c) 2020, 2021, 2022 Khue Doan

Distributed under the GPLv3 License.

This project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this project (LICENSE.md). If not, see https://www.gnu.org/licenses.

Acknowledgements

Stargazers over time

Stargazers over time

Comments
  • PXE Not booting, what is the default bios filename to boot?

    PXE Not booting, what is the default bios filename to boot?

    Thanks for sharing your config :)

    I wondered what the default boot image menu is for the pxe server you are using, as I cannot get the machines to see the default menu / boot image for pxe.

    Thanks

    question 
    opened by mannp 11
  • configure.py error

    configure.py error "TypeError: 'type' object is not subscriptable"

    python3 ./configure.py

    Text editor (vim): Enter your domain (khuedoan.com): Enter seed repo (https://github.com/khuedoan/homelab): Enter time zone (Asia/Ho_Chi_Minh): Enter your Terraform Workspace, skip if you don't want to use external resources yet (khuedoan): Traceback (most recent call last): File "./configure.py", line 27, in def find_and_replace(pattern: str, replacement: str, paths: list[str]) -> None: TypeError: 'type' object is not subscriptable

    bug enhancement 
    opened by bpersino 10
  • dhcpd.conf template does not render

    dhcpd.conf template does not render

    I'm working through your netboot solution, and I have an interesting issue where dhcpd.conf.j2 does not render properly (no variables are substituted). All of the other templates work just fine, and the variables used in dhcpd.conf.j2 are available if I run a debug step:

    # all variables are present with correct values
    - debug:
        var: '{{item}}'
      with_items:
        - ansible_default_ipv4.address
        - ansible_default_ipv4.broadcast
        - ansible_default_ipv4.gateway
        - ansible_default_ipv4.netmask
        - ansible_default_ipv4.network
    
    # no substitution occurs
    - name: Render DHCP config
      template:
        src: dhcpd.conf.j2
        dest: "{{ role_path }}/files/dhcp/dhcpd.conf"
        mode: 0644
    
    # substitution occurs correctly
    - name: Render GRUB config
      template:
        src: grub.cfg.j2
        dest: "{{ role_path }}/files/data/boot/grub/grub.cfg"
        mode: 0644
    

    Do you have any thoughts?

    opened by ahgraber 9
  • how do you manage Data in case of cluster rebuild

    how do you manage Data in case of cluster rebuild

    HI I'am new in kubernetes, I ask myself some question on restauration/secret management if you could help me

    • in case of rebuild cluster how to restore data on database or reuse persistant volume?
    • if I uninstall and install helm release this will generate new secret not according with database current password how do you manage this?
    • I can maybe create some custom secret resource to avoid this but what is best method to create this one?
    opened by vincentDcmps 9
  • Have you ever considered moving from k3 to k3os?

    Have you ever considered moving from k3 to k3os?

    First, great work and your setup is really something I hope I can achieve one day (or at least fraction of it) :)

    I have a question as title says. Have you ever consider moving from k3 on Rocky Linux to pure k3os and remove one layer of complexity (setting up os and then setting up k3?

    Keep up the great work!

    Michal

    opened by mwasowski 8
  • Rocky 8.6 kickstart stalls with root password issue

    Rocky 8.6 kickstart stalls with root password issue

    Describe the bug

    Deploying with the Rocky 8.6 issues stalls complaining of Root account is disable.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Run make tools, make configure, supply info for your environment
    2. Run make
    3. During kickstart installation stalls with "Root account is disabled"

    Expected behavior

    Kickstart should continue normally, without user intervention.

    Screenshots

    image

    Additional context

    You can move past this error by selecting option 8, providing a password and then selecting b to begin installation.. Installation will complete but will also require user to press enter once installation is complete. Supplying a root password in the kickstart template below, appears to allow the installation to complete as expected.

    /homelab/blob/master/metal/roles/pxe_server/templates/kickstart.ks.j2

    using the following line:

    rootpw --iscrypted <hashed password>

    where hashed password is created using something like:

    python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

    bug 
    opened by anothercloudnative 7
  • Building the tools containers to the test VM for the dev environment

    Building the tools containers to the test VM for the dev environment

    When I run:

    make tools to build the image based on Arch distribution I get this error and the image bulding stops, trying to troubleshooting,without results.

    Step 2/4 : RUN pacman --sync --refresh --noconfirm reflector && reflector --save /etc/pacman.d/mirrorlist --protocol https --latest 20 --sort rate ---> Running in 4687b34d956a error: failed to initialize alpm library: (root: /, dbpath: /var/lib/pacman/) could not find or read directory

    question 
    opened by recarmona 7
  • Unable to access resources behind cloudflared.

    Unable to access resources behind cloudflared.

    Describe the bug

    A clear and concise description of what the bug is.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow the instructions on the repo to deploy the lab and run the external layer.

    Expected behavior

    Access the lab via my domain.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    Additional context

    I can get to the the hajimari page and see resources found on the apps folder. Argocd & git are not working. I get a cloudflared error( 1033)

    bug 
    opened by cheers1999 6
  • Tools: volume mount relative to Makefile

    Tools: volume mount relative to Makefile

    Current volume mount assumes all files are contained in your home directory. I assume you wanted people to run make tools and then make inside the docker. This PR drops them right into the files they would need for this.

    First it determines the absolute path to the parent directory (project root) of the Makefile. Then we mount the project root directory (instead of the user's home) into the docker user's home and also use it as workdir.

    opened by karpfediem 6
  • "Bring your own cluster" mode

    Hey there!

    I've got a Kubernetes cluster I've deployed myself, and am not hugely keen on PXE booting. It would be super awesome if there was a way to use this project while skipping past the PXE boot and provisioning stuff.

    In fact, there basically is already a way! Copy your kube configs into place, then...

    make -C bootstrap instead of make, and bam... you've got a khuedoan homelab, kind of.

    Maybe you could have a target like "make existing-cluster" or something which officially supports this deployment method?

    opened by Zorlin 6
  • Feature Proposal: Automatically update helm chart dependencies

    Feature Proposal: Automatically update helm chart dependencies

    Manually keeping all dependencies up to date can be a time consuming task which can easily be automated.

    One possible solution for this is renovatebot which periodically checks for new versions and can create a pull request for each update found.

    It can easily be deployed on kubernetes via helm and works with gitea out of the box.

    enhancement good first issue 
    opened by koeberlue 6
  • Development sandbox make fails

    Development sandbox make fails

    Hello!

    I created a virtualbox to test dev environment and even with docker tools even with nix-shell tried many times in clean install at step "make"

    i get the following error:

    1st time running make

    INFO[0051] Cluster 'homelab-dev' created successfully!  
    INFO[0051] You can now use it like this:                
    kubectl cluster-info
    k3d kubeconfig get homelab-dev > kubeconfig.yaml
    make[1]: Leaving directory '/home/vip/homelab/metal'
    make -C bootstrap
    make[1]: Entering directory '/home/vip/homelab/bootstrap'
    kubectl create namespace argocd --dry-run=client --output=yaml \
            | kubectl apply -f -
    namespace/argocd created
    cd argocd && ./apply.sh
    error: error validating "STDIN": error validating data: invalid object to validate; if you choose to ignore these errors, turn validation off with --validate=false
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applications.argoproj.io" not found
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applicationsets.argoproj.io" not found
    make[1]: *** [Makefile:11: argocd] Error 1
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make: *** [Makefile:18: bootstrap] Error 2
    
    

    2nd time trying running make

    statefulset.apps/argocd-application-controller created
    ingress.networking.k8s.io/argocd-server created
    resource mapping not found for name: "argocd-application-controller" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-repo-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-redis" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io condition met
    customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io condition met
    cd root && ./apply.sh
    Error from server (NotFound): namespaces "gitea" not found
    applicationset.argoproj.io/bootstrap created
    applicationset.argoproj.io/system created
    applicationset.argoproj.io/platform created
    applicationset.argoproj.io/apps created
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make -C test filter=Smoke
    make[1]: Entering directory '/home/vip/homelab/test'
    gotestsum --format testname -- -timeout 30m -run "Smoke"
    go: downloading github.com/khuedoan/terratest v0.0.0-20220921151310-016fe8e1536b
    ...
    ...
    ...
    

    continuing after few minutes make fails.

    If you need any other details ill be happy to send you and help fix it.

    bug 
    opened by MCP-LTS 7
  • Tekton doesn't seem to work or be configured by default

    Tekton doesn't seem to work or be configured by default

    Describe the bug

    It seems that tekton pipelines want to run as root, but the permissions aren't there.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Install
    2. go to tekton.<domain_name>
    3. Everything is empty
    4. trying to import from the web interface fails with the first error in Additional context
    5. kubectl apply -k .ci/ fails on check-git-files-changed.yaml having v1alpha1
    6. change check-git-files-changed.yaml to be v1beta1
    7. kubectl apply -k .ci/ succeeds
    8. go to web interface, see second error on run
    9. try to run again via the web interface, get third error on run

    Expected behavior

    That CI would be set up with normal install

    Additional context

    completionTime: '2022-11-29T10:26:59Z'
    conditions:  - lastTransitionTime: '2022-11-29T10:26:59Z'
        message: 'failed to create task run pod "import-resources-1669717619307-import-resources": pods "import-resources-1669717619307-import-resources-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "step-git-source-git-source-djgcj" must not set runAsUser=0), seccompProfile (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe invalid TaskSpec'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    podName: ''
    startTime: '2022-11-29T10:26:59Z'
    taskSpec:  params:    - default: .
          description: The path from which resources are to be imported
          name: path
          type: string
        - default: tekton-pipelines
          description: The namespace in which to create the resources being imported
          name: target-namespace
          type: string
      resources:    inputs:      - name: git-source
            type: git
      steps:    - args:        - apply
            - '-f'
            - $(resources.inputs.git-source.path)/.ci
            - '-n'
            - tektontutorial
          command:        - kubectl
          image: lachlanevenson/k8s-kubectl:latest
          name: import
          resources: {}
    
    Pipeline tekton-pipelines/homelab can't be Run; it contains Tasks that don't exist: Couldn't retrieve Task "kaniko": tasks.tekton.dev "kaniko" not found
    
    conditions:  - lastTransitionTime: '2022-11-29T10:36:23Z'
        message: 'failed to create task run pod "homelab-r-h2wgf-git-clone": pods "homelab-r-h2wgf-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    conditions:  - lastTransitionTime: '2022-11-29T10:46:00Z'
        message: 'failed to create task run pod "homelab-git-clone": pods "homelab-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    bug 
    opened by ClashTheBunny 1
  • Switching chart provider

    Switching chart provider

    Hi there

    As the k8s-at-home charts are marked as deprecated / archived and wont get updated regularly, i propose we switch to something that still is maintained for the default app-stack.

    I mainly played around with a combination of https://github.com/truecharts and linuxserver.io images where i didnt found a suitable image. I mostly had good results and more up to date apps.

    If you would like me to get some of the apps ported over, i will gladly make some pull requests.

    Best regards gitbute

    opened by gitbute 2
  • docs: add SELinux note in prerequisites

    docs: add SELinux note in prerequisites

    • fix #90 via documentation
    • added myself as contributor

    I'm not 100% certain why the prerequisites.md file appears fully 're-written'. I suspect it's related to line endings. It's always line endings...

    opened by JamesPGriffith 0
  • make tools

    make tools "error: getting status of shell.nix: Permission denied"

    Describe the bug

    Unable to execute 'make tools'.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow documentation to make tools
    2. Observe error error: getting status of shell.nix: Permission denied
    3. attempt to run the tools command manually
    4. See error -bash: shell: command not found

    Expected behavior

    Build the tools container environment

    Screenshots

    Meh, it's all txt at this point...

    Additional context

    Add any other context about the problem here (hardware, OS, etc.).

    Hardware

    [[email protected] homelab]$ neofetch
                 .',;::::;,'.
             .';:cccccccccccc:;,.            [email protected]
          .;cccccccccccccccccccccc;.         -------------------
        .:cccccccccccccccccccccccccc:.       OS: Fedora Linux 36 (Server Edition) x86_64
      .;ccccccccccccc;.:dddl:.;ccccccc;.     Host: 2447AC4 ThinkPad W530
     .:ccccccccccccc;OWMKOOXMWd;ccccccc:.    Kernel: 5.19.10-200.fc36.x86_64
    .:ccccccccccccc;KMMc;cc;xMMc:ccccccc:.   Uptime: 1 hour
    ,cccccccccccccc;MMM.;cc;;WW::cccccccc,   Packages: 1048 (rpm)
    :cccccccccccccc;MMM.;cccccccccccccccc:   Shell: bash 5.1.16
    :ccccccc;oxOOOo;MMM0OOk.;cccccccccccc:   Resolution: 1600x900
    cccccc:0MMKxdd:;MMMkddc.;cccccccccccc;   Terminal: /dev/pts/0
    ccccc:XM0';cccc;MMM.;cccccccccccccccc'   CPU: Intel i7-3740QM (8) @ 3.700GHz
    ccccc;MMo;ccccc;MMW.;ccccccccccccccc;    GPU: NVIDIA Quadro K1000M
    ccccc;0MNc.ccc.xMMd:ccccccccccccccc;     GPU: Intel 3rd Gen Core processor Graphics Controller
    cccccc;dNMWXXXWM0::cccccccccccccc:,      Memory: 466MiB / 15814MiB
    cccccccc;.:odl:.;cccccccccccccc:,.
    :cccccccccccccccccccccccccccc:'.                                 
    .:cccccccccccccccccccccc:;,..                                    
      '::cccccccccccccc::;,.
    
    
    [[email protected] homelab]$
    

    OS Details

    As the nodes will be provisioned with Fedora, I chose Fedora for the Initial controller for consistency. Even the same version.

    [[email protected] homelab]$ cat /etc/os-release
    NAME="Fedora Linux"
    VERSION="36 (Server Edition)"
    ID=fedora
    VERSION_ID=36
    VERSION_CODENAME=""
    PLATFORM_ID="platform:f36"
    PRETTY_NAME="Fedora Linux 36 (Server Edition)"
    ANSI_COLOR="0;38;2;60;110;180"
    LOGO=fedora-logo-icon
    CPE_NAME="cpe:/o:fedoraproject:fedora:36"
    HOME_URL="https://fedoraproject.org/"
    DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
    SUPPORT_URL="https://ask.fedoraproject.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=36
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=36
    PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
    VARIANT="Server Edition"
    VARIANT_ID=server
    [[email protected] homelab]$
    

    user and groups

    [[email protected] homelab]$ id
    uid=1000(user) gid=1000(user) groups=1000(user),10(wheel),984(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [[email protected] homelab]$
    

    Original error

    [[email protected] homelab]$ make tools
    error: getting status of shell.nix: Permission denied
    make: *** [Makefile:30: tools] Error 1
    [[email protected] homelab]$
    

    SELinux

    I honestly think this is it...

    [[email protected] homelab]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    [[email protected] homelab]$
    
    bug 
    opened by JamesPGriffith 4
  • Serverless

    Serverless

    It would be nice to have something serverless, like knative.dev , or one of the other CNCF options: https://landscape.cncf.io/card-mode?category=serverless&license=open-source&grouping=category&sort=stars

    opened by ClashTheBunny 1
Releases(v0.0.8)
  • v0.0.8(Jul 26, 2022)

    What's Changed

    • build: run post install scripts by default
    • build: set KUBECONFIG from global Makefile
    • feat(external-dns)!: add cluster name as owner ID
    • feat(tools): install yamllint, ansible-lint and k9s
    • feat(tools): set KUBECONFIG by default
    • feat: add pre-commit hooks
    • feat: add script to setup Gitea tokens and OAuth apps
    • perf(argocd): turning on selective sync
    • refactor(docs): migrate to mkdocs
    • refactor(metal): migrate to Fedora 36 for newer packages
    • refactor(pxe)!: combine dhcpd and tftpd to dnsmasq
    • Many bug fixes

    New Contributors

    • @Bourne-ID made their first contribution in https://github.com/khuedoan/homelab/pull/69

    Full Changelog: https://github.com/khuedoan/homelab/compare/v0.0.7-alpha...v0.0.8

    Source code(tar.gz)
    Source code(zip)
  • v0.0.7-alpha(May 14, 2022)

    What's Changed

    https://homelab.khuedoan.com/reference/changelog/#007-alpha

    • Replace standard Vault with Vault Operator
    • Automatically initialize and unseal Vault
    • Declarative secret generation and management
    • Declarative Gitea configuration with YAML
    • Automatic OS rolling upgrade
    • Automatic Kubernetes rolling upgrade
    • Automatic application updates using Renovate (still require manual token generation)
    • Add script to wait for essential services after deployment
    • Add icons and bookmarks to the home page
    • Deploy Matrix chat
    • Replace Authentik with Dex for SSO (still require manual token generation)
    • Switch to Mermaid for diagrams in documentation
    • Replace Vagrant with k3d for development environment
    • Use nip.io domain for development environment
    • Remove Backblaze (S3 Glacier and/or Minio will be added in future version)
    • Enable monitor for the majority of applications
    • Many code refactorings and bug fixes

    New Contributors

    • @locmai made their first contribution in https://github.com/khuedoan/homelab/pull/5
    • @MatthewJohn made their first contribution in https://github.com/khuedoan/homelab/pull/12
    • @karpfediem made their first contribution in https://github.com/khuedoan/homelab/pull/36
    • @linhng98 made their first contribution in https://github.com/khuedoan/homelab/pull/41
    • @BlueHatbRit made their first contribution in https://github.com/khuedoan/homelab/pull/44
    • @dotdiego made their first contribution in https://github.com/khuedoan/homelab/pull/49
    • @Crimrose made their first contribution in https://github.com/khuedoan/homelab/pull/51
    • @eventi made their first contribution in https://github.com/khuedoan/homelab/pull/55

    Full Changelog: https://github.com/khuedoan/homelab/commits/v0.0.7-alpha

    Source code(tar.gz)
    Source code(zip)
Owner
Khue Doan
Site Reliability Engineer
Khue Doan
New armachat based on Raspberry Pi PICO an Circuitpython code

Armachat-circuitpython New Armachat based on Raspberry Pi PICO an Circuitpython code Software working features: send message with header and store to

Peter Misenko 44 Dec 24, 2022
智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件

Drone智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。它以A、B两国在C区开展无人机战争为背景,该系统的核心功能是通过仿真平台规划无人机航线,并进行验证输出,数据可导入真实无人机,使其按照规定路线精准抵达战场任一位置,支持多人多设备编队联合行动。

wwy 349 Jan 03, 2023
Workshop for student hackathons focused on IoT dev

Scenario: The Mutt Matcher (IoT version) According to the World Health Organization there are more than 200 million stray dogs worldwide. The American

Microsoft 15 Aug 10, 2022
Example code to sending USB Gadget multimedia keys via Python

Send Multimedia USB HID Keys via Python As an USB Gadget in Linux This gives a simple script with zero dependencies that can easily run on any Linux d

DevOps Nirvana 2 Jan 02, 2023
Make your MacOS keyboard brightness fade in and out

Make your MacOS keyboard brightness fade in and out. (It's working depends on the Kbrightness file, which only works for 2015 Macs, so this will only work on 2015 Macs.)

1 Dec 16, 2021
Cascade Drone Swarm Physical Demonstration Project

Cascade Drone Swarm Physical Demonstration Project Table of Contents About The Project Built With Getting Started Prerequisites Installation About The

3 Aug 24, 2022
Red Light Green Light Robot

Red Light Green Light Robot The primary problem addressed by our project is robotic follower behavior i.e. maintaining distance from a moving target.

Will Romano 2 Nov 20, 2021
Python implementation of ZMP Preview Control approach for biped robot control.

ZMP Preview Control This is the Python implementation of ZMP Preview Control app

Chaobin 24 Dec 19, 2022
Water quality integration for Home Assistant with data provided by Budapest FVM

Water Quality FVM (Budapest, HU) custom integration for Home Assistant This custom component integrates water quality information provided by Budapest

Atticus Maximus 3 Dec 23, 2021
GUI wrapper designed for convenient service work with TI CC1352/CC2538/CC2652 based Zigbee sticks or gateways. Packed into single executable file

ZigStar GW Multi tool is GUI wrapper firtsly designed for convenient service work with Zig Star LAN GW, but now supports any TI CC1352/CC2538/CC2652 b

133 Jan 01, 2023
A refreshed Python toolbox for building complex digital hardware

A refreshed Python toolbox for building complex digital hardware

nMigen 1k Jan 05, 2023
Implemented robot inverse kinematics.

robot_inverse_kinematics Project setup # put the package in the workspace $ cd ~/catkin_ws/ $ catkin_make $ source devel/setup.bash Description In thi

Jianming Han 2 Dec 08, 2022
Jarvis: a personal assistant which can help you to manage your system

Jarvis Jarvis is personal AI based assistant which can help you to manage stuff in your computer. This is demo but I decided to make it more better so

2 Jun 02, 2022
A raspberrypi tools for python

raspberrypi-tools how to install: first clone this project: git clone https://github.com/Ardumine/rpi-tools.git then go to the folder cd rpi-tools and

1 Jan 04, 2022
A lightweight script for updating custom components for Home Assistant

Updater for Home Assistant This is a lightweight script for updating custom components for Home Assistant. If for some reason you do not want to use H

Alex X 12 Sep 21, 2022
Raspberry Pi Spectrometer

PySpectrometer 2021-03-05 Raspberry Pi Spectrometer The PySpectrometer is a Python (OpenCV and Tkinter) implementation of an optical spectrometer. The

Les Wright 538 Jan 05, 2023
This is a Virtual Keyboard which is simple yet effective to use.

Virtual-Keyboard This is a Virtual KeyBoard which can track finger movements and lets you type anywhere ranging from notepad to even web browsers. It

Jehan Patel 3 Oct 01, 2021
hardware design of the 250mm drone

hardware design of the 250mm drone

ZJU FAST Lab 645 Dec 25, 2022
A Python script to monitor the latest block on an LCD.

PiHole-Monitoring A Python script to monitor the latest block on a lcd display. The first number represents the dns queries from the last 24h, the sec

Maxi 4 Dec 05, 2022
LUNA: a USB multitool & nMigen library

LUNA is a full toolkit for working with USB using FPGA technology; and provides hardware, gateware, and software to enable USB applications.

Great Scott Gadgets 750 Dec 28, 2022